File tree 3 files changed +73
-2
lines changed
3 files changed +73
-2
lines changed Original file line number Diff line number Diff line change 29
29
30
30
## 解法
31
31
<!-- 这里可写通用的实现逻辑 -->
32
-
32
+ 双端队列实现。
33
33
34
34
### Python3
35
35
<!-- 这里可写当前语言的特殊实现逻辑 -->
36
36
37
37
``` python
38
+ class Solution :
39
+ def maxSlidingWindow (self , nums : List[int ], k : int ) -> List[int ]:
40
+ q, res = [], []
41
+ for i, num in enumerate (nums):
42
+ while len (q) != 0 and nums[q[- 1 ]] <= num:
43
+ q.pop(- 1 )
44
+ q.append(i)
45
+
46
+ if q[0 ] == i - k:
47
+ q = q[1 :]
48
+ if i >= k - 1 :
49
+ res.append(nums[q[0 ]])
50
+ return res
38
51
39
52
```
40
53
41
54
### Java
42
55
<!-- 这里可写当前语言的特殊实现逻辑 -->
43
56
44
57
``` java
45
-
58
+ class Solution {
59
+ public int [] maxSlidingWindow (int [] nums , int k ) {
60
+ int index = 0 , n = nums. length;
61
+ if (k == 0 || n == 0 ) {
62
+ return new int [0 ];
63
+ }
64
+ int [] res = new int [n - k + 1 ];
65
+ LinkedList<Integer > q = new LinkedList<> ();
66
+ for (int i = 0 ; i < n; ++ i) {
67
+ while (! q. isEmpty() && nums[q. peekLast()] <= nums[i]) {
68
+ q. pollLast();
69
+ }
70
+ q. addLast(i);
71
+ if (q. peekFirst() == i - k) {
72
+ q. pollFirst();
73
+ }
74
+ if (i >= k - 1 ) {
75
+ res[index++ ] = nums[q. peekFirst()];
76
+ }
77
+ }
78
+ return res;
79
+ }
80
+ }
46
81
```
47
82
48
83
### ...
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public int [] maxSlidingWindow (int [] nums , int k ) {
3
+ int index = 0 , n = nums .length ;
4
+ if (k == 0 || n == 0 ) {
5
+ return new int [0 ];
6
+ }
7
+ int [] res = new int [n - k + 1 ];
8
+ LinkedList <Integer > q = new LinkedList <>();
9
+ for (int i = 0 ; i < n ; ++i ) {
10
+ while (!q .isEmpty () && nums [q .peekLast ()] <= nums [i ]) {
11
+ q .pollLast ();
12
+ }
13
+ q .addLast (i );
14
+ if (q .peekFirst () == i - k ) {
15
+ q .pollFirst ();
16
+ }
17
+ if (i >= k - 1 ) {
18
+ res [index ++] = nums [q .peekFirst ()];
19
+ }
20
+ }
21
+ return res ;
22
+ }
23
+ }
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def maxSlidingWindow (self , nums : List [int ], k : int ) -> List [int ]:
3
+ q , res = [], []
4
+ for i , num in enumerate (nums ):
5
+ while len (q ) != 0 and nums [q [- 1 ]] <= num :
6
+ q .pop (- 1 )
7
+ q .append (i )
8
+
9
+ if q [0 ] == i - k :
10
+ q = q [1 :]
11
+ if i >= k - 1 :
12
+ res .append (nums [q [0 ]])
13
+ return res
You can’t perform that action at this time.
0 commit comments