text: // 给定一个数组和滑动窗口的大小，找出所有滑动窗口里数值的最大值。例如，如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3，
  // 那么一共存在6个滑动窗口，他们的最大值分别为{4,4,6,6,6,5}； 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个：
  // {[2,3,4],2,6,2,5,1}， {2,[3,4,2],6,2,5,1}， {2,3,[4,2,6],2,5,1}， {2,3,4,[2,6,2],5,1}， {2,3,4,2,[6,2,5],1}， {2,3,4,2,6,[2,5,1]}。
  
  // 仔细想想，对于数组{2,3,4,2,6,2,5,1}来说，假如窗口大小为3，则整个过程如下：
  // {[2,3,4],2,6,2,5,1}，此时最大值是4
  // {2,[3,4,2],6,2,5,1}，此时最大值是4
  // {2,3,[4,2,6],2,5,1}，此时最大值是6，因为新进入窗口的6比4还大
  // {2,3,4,[2,6,2],5,1}，此时最大值是6
  // {2,3,4,2,[6,2,5],1}，此时最大值是6
  // {2,3,4,2,6,[2,5,1]}，此时最大值是5
  // 可以得出思路是：
  // 保存当前窗口最大值的数组下标maxIndex，滑动一次窗口，若maxIndex还在窗口内，则只需要比较maxIndex处的值和最新进入窗口的值哪个大，
  // 新进入的值大则更新maxIndex，否则不需要更新；若maxIndex不在窗口内，则要遍历一次当前窗口的所有值找出新的maxIndex
  
  
  /**
   * 找出所有滑动窗口里数值的最大值
   *
   * @param {*} arr 数组
   * @param {*} size 窗口大小
   */
  function maxInWindows (arr, size) {
    if (arr.length < size || size === 0) {
      return []
    }
    let res = []
    let maxIndex = -1
    for (let f = 0, l = size - 1; l < arr.length; f++, l++) {
      if (f > maxIndex) {
        maxIndex = getMax(arr, f, l)
      }
      if (arr[l] > arr[maxIndex]) {
        maxIndex = l
      }
      res.push(arr[maxIndex])
    }
    return res
  }
  
  function getMax (arr, f, l) {
    let index = f
    for (let i = f; i <= l; i++) {
      if (arr[i] > arr[index]) {
        index = i
      }
    }
    return index
  }