File tree 1 file changed +19
-18
lines changed
src/main/java/com/fishercoder/solutions
1 file changed +19
-18
lines changed Original file line number Diff line number Diff line change 1
1
package com .fishercoder .solutions ;
2
2
3
- import java .util .PriorityQueue ;
3
+ import java .util .LinkedList ;
4
4
5
5
public class _239 {
6
6
7
7
public static class Solution1 {
8
- public int [] maxSlidingWindow (int [] nums , int k ) {
9
- if (nums == null || nums .length == 0 || k == 0 ) {
10
- return new int [0 ];
8
+ public int [] maxSlidingWindow (int [] nums , int k ) {
9
+ int n = nums .length ;
10
+ if (n == 0 ) {
11
+ return nums ;
12
+ }
13
+ int [] result = new int [n - k + 1 ];
14
+ LinkedList <Integer > dq = new LinkedList <>();
15
+ for (int i = 0 ; i < n ; i ++) {
16
+ if (!dq .isEmpty () && dq .peek () < i - k + 1 ) {
17
+ dq .poll ();
18
+ }
19
+ while (!dq .isEmpty () && nums [i ] >= nums [dq .peekLast ()]) {
20
+ dq .pollLast ();
11
21
}
12
- PriorityQueue <Integer > heap = new PriorityQueue <>((a , b ) -> b - a );
13
- int [] res = new int [nums .length - k + 1 ];
14
- for (int i = 0 ; i < nums .length ; i ++) {
15
- if (i < k ) {
16
- heap .offer (nums [i ]);
17
- if (i == k - 1 ) {
18
- res [0 ] = heap .peek ();
19
- }
20
- } else {
21
- heap .remove (nums [i - k ]);
22
- heap .offer (nums [i ]);
23
- res [i - k + 1 ] = heap .peek ();
24
- }
22
+ dq .offer (i );
23
+ if (i - k + 1 >= 0 ) {
24
+ result [i - k + 1 ] = nums [dq .peek ()];
25
25
}
26
- return res ;
27
26
}
27
+ return result ;
28
28
}
29
+ }
29
30
}
You can’t perform that action at this time.
0 commit comments