# 239. 滑动窗口最大值

# 解题思路

最粗暴的方式就是遍历数组:

  • 首先判断数组长度是否小于等于滑动窗口大小,如果小于,则直接返回数组中的最大值;
  • 否则,遍历数组,每次取滑动窗口大小,并判断当前值是否大于最大值,如果大于,则更新最大值;
  • 每次遍历数组时,将最大值记录在数组中;
var maxSlidingWindow = function (nums, k) {
  var len = nums.length
  var result = []
  var maxVlaue = -Infinity

  if (len <= k) {
    while (len--) {
      if (nums[len] > maxVlaue) {
        maxVlaue = nums[len]
      }
    }

    return [maxVlaue]
  }

  for (var i = 0; i <= len - k; i++) {
    let nums2 = nums.slice(i, i + k)
    let len2 = nums2.length
    maxVlaue = -Infinity

    while (len2--) {
      if (nums2[len2] > maxVlaue) {
        maxVlaue = nums2[len2]
      }
    }

    result.push(maxVlaue)
  }

  return result
}

更进一步可以使用优先队列,且还能进一步优化,具体解法见官方题解 (opens new window)

# 参考