天天看点

代码随想录day13打卡

代码随想录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 
}