package com.heu.wsq.leetcode.arr;
import java.util.Deque;
import java.util.LinkedList;
/**
* 剑指 Offer 59 - I. 滑动窗口的最大值
* @author wsq
* @date 2021/1/24
* 给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。
*
* 示例:
*
* 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3
* 输出: [3,3,5,5,6,7]
*
* 链接:https://leetcode-cn.com/leetbook/read/illustration-of-algorithm/58o46i/
*/
public class MaxSlidingWindow {
public int[] maxSlidingWindow(int[] nums, int k){
int n = nums.length;
if (k < 1 || k > n){
return new int[0];
}
int[] res = new int[n - k + 1];
Deque<Integer> deque = new LinkedList<>();
// 未成窗口时
for (int i = 0; i < k; i++){
// 保证deque是单调递减的
while (!deque.isEmpty() && deque.peekLast() < nums[i]){
deque.removeLast();
}
deque.addLast(nums[i]);
}
res[0] = deque.peekFirst();
// 构成窗口
for (int i = k; i < n; i++){
if (deque.peekFirst() == nums[i - k]){
deque.removeFirst();
}
while (!deque.isEmpty() && deque.peekLast() < nums[i]){
deque.removeLast();
}
deque.addLast(nums[i]);
res[i - k + 1] = deque.peekFirst();
}
return res;
}
}
剑指 Offer 59 - I. 滑动窗口的最大值
最新推荐文章于 2026-07-04 08:21:57 发布
本文档详细讲解了如何使用Java实现剑指 Offer 中的第59题,即在一个整数数组中找到每个滑动窗口内的最大值。通过队列操作和迭代,博主展示了如何高效地找到给定窗口大小k下的最大值序列。
133

被折叠的 条评论
为什么被折叠?



