剑指 Offer 59 - I. 滑动窗口的最大值
题目:
给定一个数组 nums
和滑动窗口的大小 k
,请找出所有滑动窗口里的最大值。
示例:
[1,3,-1,-3,5,3,6,7]
[3,3,5,5,6,7]
解释:
提示:
你可以假设 k 总是有效的,在输入数组不为空的情况下,1 ≤ k ≤ 输入数组的大小。
代码:
1 class Solution { 2 public int[] maxSlidingWindow(int[] nums, int k) { 3 4 //数组为空 5 if(nums.length==0){return new int[0];} 6 7 //k大于数组长度 8 if (nums.length <=k) { 9 Arrays.sort(nums); 10 int[] res=new int[1]; 11 res[0]=nums[nums.length-1]; 12 return res; 13 } 14 15 //k小于数组长度 16 int max=0; 17 List<Integer> list=new ArrayList<>(); 18 for (int i = k-1; i < nums.length; i++) { 19 max=Integer.MIN_VALUE; 20 for (int j = i; j >i-k ; j--) { 21 max=max<nums[j]?nums[j] :max; 22 } 23 list.add(max); 24 } 25 int[] res=new int[list.size()]; 26 for(int i=0;i< res.length;i++){ 27 res[i]=list.get(i); 28 } 29 return res; 30 31 } 32 }
代码2:
//采用单调队列 ,对队列不熟悉,导致选取方法搞了半天,最后还弄错了几次,用了一小时才弄好
1 class Solution { 2 public int[] maxSlidingWindow(int[] nums, int k) { 3 4 if(nums.length==0){ 5 return new int[0]; 6 } 7 if (nums.length<=k){ 8 Arrays.sort(nums); 9 int[] ints= new int[1]; 10 ints[0] = nums[nums.length-1]; 11 return ints; 12 } 13 14 List<Integer> list=new ArrayList<>(); 15 Deque<Integer> deque=new LinkedList<>(); 16 17 for (int i = 0; i < k; i++) { 18 while(!deque.isEmpty()&&deque.peekLast()<nums[i]){ 19 deque.pollLast(); 20 } 21 deque.offer(nums[i]); 22 } 23 for (int i = 0,j=k; j < nums.length ; i++,j++) { 24 //当前最大元素 25 list.add(deque.peek()); 26 //判断左下标是不是当前最大元素 27 if(nums[i]==deque.peek()){ 28 deque.poll(); 29 } 30 //重新排列递减队列 31 while(!deque.isEmpty()&&deque.peekLast()<nums[j]){ 32 deque.pollLast(); 33 } 34 deque.offer(nums[j]); 35 } 36 list.add(deque.poll()); 37 int[] ints=new int[list.size()]; 38 for (int i = 0; i < ints.length; i++) { 39 ints[i]=list.get(i); 40 } 41 return ints; 42 } 43 }
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术