代码随想录day13打卡
-
- 239 滑动窗口最大值
- 347 前 K 个高频元素
239 滑动窗口最大值
239 滑动窗口最大值
//239 滑动窗口最大值
var maxSlidingWindow = function(nums, k) {
let queue = [] // 单调队列
let res = [] // 结果数组
for (let i = 0; i < nums.length; i++) {
while (queue.length && nums[queue[queue.length - 1]] < nums[i]) { // 如果队尾元素小于当前元素,出队
//如果当前元素大于队列尾部的元素,就把队列尾部的元素移除
queue.pop()
}
queue.push(i)
if (queue[0] <= i - k) {//如果队列头部的下标已经不在滑动窗口内,就移除
queue.shift()
}
if (i >= k - 1) { // 当滑动窗口形成时,将队列头部元素加入结果数组
res.push(nums[queue[0]])
}
}
return res
};
347 前 K 个高频元素
347 前 K 个高频元素
//347 前 K 个高频元素
var topKFrequent = function(nums, k) {
let map = new Map() // 哈希表
for (let i = 0; i < nums.length; i++) {
if (map.has(nums[i])) { // 如果哈希表中有该元素,将其对应的值加一
map.set(nums[i], map.get(nums[i]) + 1)
} else { // 如果哈希表中没有该元素,将其加入哈希表,并将其对应的值设为 1
map.set(nums[i], 1)
}
}
let arr = [...map] // 将哈希表转换为二维数组
arr.sort((a, b) => b[1] - a[1]) // 对二维数组按照元素出现的次数进行排序
let res = [] // 结果数组
for (let i = 0; i < k; i++) { // 取出前 k 个元素
res.push(arr[i][0])
}
return res
}