用Javascript写一个滑动窗口
滑动窗口是一种常见的算法技巧,在很多算法问题中都有应用。下面是一个用JavaScript实现的滑动窗口模板。
function slidingWindow(nums, k) {
const n = nums.length;
const result = [];
const deque = []; // 双端队列,用来存储当前窗口的元素下标
for (let i = 0; i < n; i++) {
// 如果队列中第一个元素已经不在窗口内,就将其移除
if (deque.length > 0 && deque[0] < i - k + 1) {
deque.shift();
}
// 如果队列中最后一个元素小于当前元素,就将其移除,因为当前元素更大,后面不可能成为最大值了
while (deque.length > 0 && nums[deque[deque.length - 1]] < nums[i]) {
deque.pop();
}
// 将当前元素加入队列
deque.push(i);
// 如果当前窗口已经形成,就将窗口最大值加入结果数组
if (i >= k - 1) {
result.push(nums[deque[0]]);
}
}
return result;
}
这个函数接受两个参数,nums表示原始数组,k表示窗口大小。函数返回一个数组,表示每个窗口的最大值。
下面是一个例子:
const nums = [1, 3, -1, -3, 5, 3, 6, 7];
const k = 3;
console.log(slidingWindow(nums, k)); // [3, 3, 5, 5, 6, 7]
这个例子中,原始数组为[1, 3, -1, -3, 5, 3, 6, 7],窗口大小为3,滑动窗口的最大值分别为3, 3, 5, 5, 6, 7。
原文地址: https://www.cveoy.top/t/topic/qsy 著作权归作者所有。请勿转载和采集!