-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSlidingMaximum.java
40 lines (36 loc) · 1.09 KB
/
SlidingMaximum.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package POTD;
import java.util.LinkedList;
import java.util.Deque;
import java.util.ArrayList;
public class SlidingMaximum {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 1, 4, 5, 2, 3, 6 };
System.out.println(max_of_subarray(3, arr));
}
public static ArrayList<Integer> max_of_subarray(int k, int nums[]) {
ArrayList<Integer> list = new ArrayList<>();
Deque<Integer> que = new LinkedList<>();
int i = 0, j = 0;
while (j < nums.length) {
if (que.size() == 0) {
que.add(nums[j]);
} else {
while (que.size() > 0 && que.peekLast() < nums[j]) {
que.removeLast();
}
que.add(nums[j]);
}
if (j - i + 1 < k) {
j++;
} else if (j - i + 1 == k) {
list.add(que.peek());
if (nums[i] == que.peek()) {
que.removeFirst();
}
i++;
j++;
}
}
return list;
}
}