0
点赞
收藏
分享

微信扫一扫

问题记录之Qt Creator下qDebug中文乱码

迎月兮 2024-09-04 阅读 6

文章目录

滑动窗口最大值

示例 1:
输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
输出:[3,3,5,5,6,7]
解释:
滑动窗口的位置                最大值
---------------               -----
[1  3  -1] -3  5  3  6  7       3
 1 [3  -1  -3] 5  3  6  7       3
 1  3 [-1  -3  5] 3  6  7       5
 1  3  -1 [-3  5  3] 6  7       5
 1  3  -1  -3 [5  3  6] 7       6
 1  3  -1  -3  5 [3  6  7]      7
 
示例 2:
输入:nums = [1], k = 1
输出:[1]

我的思路

var maxSlidingWindow = function (nums, k) {
    let result = [];
    for (let i = 0; i <= nums.length - k; i++) {
        let max = nums[i];
        for (let j = 1; j < k; j++) {
            if (nums[i + j] > max) {
                max = nums[i + j];
            }
        }
        result.push(max);
    }
    return result;
};

网上思路

var maxSlidingWindow = function (nums, k) {
    let result = [];
    let deque = []; // 用于存储索引
    for (let i = 0; i < nums.length; i++) {
        // 移除不在窗口内的元素
        if (deque.length && deque[0] < i - k + 1) {
            deque.shift();
        }
        // 移除小于当前元素的索引
        while (deque.length && nums[deque[deque.length - 1]] < nums[i]) {
            deque.pop();
        }
        // 添加当前元素的索引
        deque.push(i);
        // 当窗口达到大小 k 时,记录当前窗口的最大值
        if (i >= k - 1) {
            result.push(nums[deque[0]]);
        }
    }
    return result;
};

总结

滑动窗口这一块,回头需要好好学习一下,真的没怎么搞懂。。。

举报

相关推荐

0 条评论