
Set和Map都有has方法
JS 中 Set.prototype.has() 和 Map.prototype.has() 的核心区别在于判断的目标不同,具体差异如下:
核心区别
Set.has(value) 集合中是否存在该值 入参为要检测的值 Map.has(key) 映射中是否存在该键 入参为要检测的键,值不参与判断
js
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var nextGreaterElement = function (nums1, nums2) {
// 栈中记录还没算出「下一个更大元素」的那些数。
const map = new Map()
const st = []
const ans = Array(nums1.length).fill(-1)
nums1.forEach((x, i) => map.set(x, i))
for (let i = 0; i < nums2.length; i++) {
const x = nums2[i]
while (st.length && x > st[st.length - 1]) {
// x > 栈顶元素 则栈内元素找到了「下一个更大元素」
// x 是栈顶的下一个更大元素
// 既然栈顶已经算出答案,弹出
ans[map.get(st.pop())] = x // 记录答案
}
if (map.has(x)) {
st.push(x)
}
}
return ans
}