返回滑动窗口中的最大值

博客围绕滑动窗口求最大值展开,虽无具体内容,但可知核心是解决滑动窗口场景下获取最大值的问题,这在信息技术领域的算法应用中较为常见。
class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
    	LinkedList<Integer> queue = new LinkedList<Integer>();
   		int[] res = new int[nums.length-k+1];
    	int left = 0;
    	for (int i=0;i<nums.length;i++){
    		if (i>=k){
    			left++;
    		}
    		if (queue.size()>0&&queue.getFirst()<left){
    			queue.removeFirst();
    		}
    		while (queue.size()>0&&nums[queue.getLast()]<=nums[i]){
    			queue.removeLast();
    		}

    		queue.addLast(i);
    		if (i>=k-1){
    			res[left]=nums[queue.getFirst()];
    		}
    	}
    	return res;
    }
}```

### 关于滑动窗口最大值的Java实现 滑动窗口算法是一种高效的方法,用于解决涉及连续子数组或子字符串的问题。当目标是从一个固定大小的滑动窗口中找到最大值时,可以通过双端队列(Deque)来优化性能[^2]。 以下是基于双端队列的滑动窗口最大值算法的具体实现: #### 算法核心思想 1. 使用双端队列存储当前窗口中的索引。 2. 双端队列的第一个元素始终保存当前窗口的最大值对应的索引。 3. 当新元素进入窗口时,移除队列中所有小于等于该新元素的索引,以保持队列单调递减特性。 4. 如果队首元素超出当前窗口范围,则将其从队列中移除。 5. 每次移动窗口后,记录当前窗口的最大值。 #### Java代码实现 以下是一个完整的Java程序,演示如何求解滑动窗口最大值: ```java import java.util.*; public class SlidingWindowMaximum { public static List<Integer> maxSlidingWindow(int[] nums, int k) { List<Integer> result = new ArrayList<>(); Deque<Integer> deque = new LinkedList<>(); // 存储索引 for (int i = 0; i < nums.length; i++) { // 移除不在当前窗口内的索引 while (!deque.isEmpty() && deque.peekFirst() < i - k + 1) { deque.pollFirst(); } // 维护队列为单调递减序列 while (!deque.isEmpty() && nums[i] >= nums[deque.peekLast()]) { deque.pollLast(); } deque.offerLast(i); // 添加当前索引 // 记录当前窗口的最大值 if (i >= k - 1) { result.add(nums[deque.peekFirst()]); } } return result; } public static void main(String[] args) { int[] nums = {2, 3, 5, 2, 6, 2, 4, 1}; int k = 3; List<Integer> maxValues = maxSlidingWindow(nums, k); System.out.println(maxValues.toString()); // 输出: [5, 5, 6, 6, 6, 4] } } ``` 上述代码实现了滑动窗口最大值的功能,并通过`maxSlidingWindow`方法返回每个窗口的最大值列表。此方法的时间复杂度为O(n),其中n是输入数组长度[^3]。 #### 结果解释 对于输入数组 `{2, 3, 5, 2, 6, 2, 4, 1}` 和窗口大小 `k=3`,最终得到的结果为 `[5, 5, 6, 6, 6, 4]`,这表示每个滑动窗口最大值依次为这些值[^4]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值