滑动窗口是一种常见的算法技巧,在很多算法问题中都有应用。下面是一个用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。

用Javascript写一个滑动窗口

原文地址: https://www.cveoy.top/t/topic/qsy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录