剑指 Offer 59 - I. 滑动窗口的最大值
题目
给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。
解法
class Solution {
public int[] maxSlidingWindow(int[] nums
, int k
) {
if(nums
.length
== 0 || k
== 0) return new int[0];
Deque
<Integer> dq
= new LinkedList<>();
int len
= nums
.length
;
int[] res
= new int[len
-k
+1];
for(int i
= 0 ; i
< k
; ++i
){
int cur
= nums
[i
];
while(!dq
.isEmpty()&&dq
.peekLast()<cur
) dq
.removeLast();
dq
.addLast(cur
);
}
res
[0] = dq
.peekFirst();
for(int i
= k
; i
< len
; ++i
){
int cur
= nums
[i
];
if(nums
[i
-k
]==dq
.peekFirst()) dq
.removeFirst();
while(!dq
.isEmpty()&&dq
.peekLast()<cur
) dq
.removeLast();
dq
.addLast(cur
);
res
[i
-k
+1] = dq
.peekFirst();
}
return res
;
}
}
转载请注明原文地址:https://blackberry.8miu.com/read-15938.html