// maxSlidingWindow 方法用于找出数组 nums 中长度为 k 的滑动窗口中的最大值 // 返回一个数组,包含了每个滑动窗口的最大值 publicint[] maxSlidingWindow(int[] nums, int k) { // 初始化结果数组 res,其长度为 nums 长度减去 k 加 1 int[] res = newint[nums.length - k + 1]; // 初始化一个双端队列 queue,用于存储索引 Deque<Integer> queue = newLinkedList<>(); intn= nums.length; // 获取数组 nums 的长度
// 遍历数组 nums for (inti=0; i < n; i++) { // 如果队列不为空且当前索引 i 减去 k 加 1 大于队列的第一个元素索引,则移除队列头部元素 if (!queue.isEmpty() && i - k + 1 > queue.getFirst()) { queue.pollFirst(); } // 维护队列,确保队列中的元素是有序的,即后面元素的值不小于前面元素的值 // 如果队列不为空且队列末尾元素对应的值小于当前元素的值,则移除队列末尾元素 while (!queue.isEmpty() && nums[queue.getLast()] < nums[i]) { queue.pollLast(); } // 将当前元素的索引 i 加入队列 queue.addLast(i); // 如果当前索引 i 大于等于 k - 1,说明窗口已经滑动,可以计算最大值 // 将队列头部元素对应的值赋给结果数组 res 的相应位置 if (i >= k - 1) { res[i - k + 1] = nums[queue.getFirst()]; } } // 返回结果数组 res return res; } }