239. 滑动窗口最大值

  1. int index = 0;
  2. int head = 0;
  3. int tail = -1;
  4. int[] moQue = new int[nums.length];//单调队列
  5. int[] res = new int[nums.length-k+1];//结果集
  6. for (int i = 0; i < nums.length; ++ i) {
  7. // 判断队头是否已经滑出窗口
  8. if (head <= tail && i - k + 1 > moQue[head]) ++ head;
  9. // 维护队列的单调性
  10. while (head <= tail && nums[i] > nums[moQue[tail]]) -- tail;
  11. moQue[++ tail] = i;
  12. // 输出最小值
  13. if (k <= i + 1)
  14. res[index++] = nums[moQue[head]];
  15. }