File tree 6 files changed +226
-0
lines changed
6 files changed +226
-0
lines changed Original file line number Diff line number Diff line change @@ -122,6 +122,54 @@ var maxSlidingWindow = function (nums, k) {
122
122
};
123
123
```
124
124
125
+ ### ** C++**
126
+
127
+ ``` cpp
128
+ class Solution {
129
+ public:
130
+ vector<int > maxSlidingWindow(vector<int >& nums, int k) {
131
+ vector<int > ans;
132
+ deque<int > window;
133
+ int n = nums.size();
134
+ for (int i = 0; i < n; ++i) {
135
+ while (!window.empty() && nums[ window.back()] <= nums[ i] ) {
136
+ window.pop_back();
137
+ }
138
+ window.push_back(i);
139
+ if (window.front() == i - k) {
140
+ window.pop_front();
141
+ }
142
+ if (i >= k - 1) {
143
+ ans.push_back(nums[ window.front()] );
144
+ }
145
+ }
146
+ return ans;
147
+ }
148
+ };
149
+ ```
150
+
151
+ ### **Go**
152
+
153
+ ```go
154
+ func maxSlidingWindow(nums []int, k int) []int {
155
+ ans := make([]int, 0, len(nums)-k+1)
156
+ window := make([]int, 0)
157
+ for i, num := range nums {
158
+ for len(window) != 0 && nums[window[len(window)-1]] <= num {
159
+ window = window[:len(window)-1]
160
+ }
161
+ window = append(window, i)
162
+ if window[0] == i-k {
163
+ window = window[1:]
164
+ }
165
+ if i >= k-1 {
166
+ ans = append(ans, nums[window[0]])
167
+ }
168
+ }
169
+ return ans
170
+ }
171
+ ```
172
+
125
173
### ** ...**
126
174
127
175
```
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ vector<int > maxSlidingWindow (vector<int >& nums, int k) {
4
+ vector<int > ans;
5
+ deque<int > window;
6
+ int n = nums.size ();
7
+ for (int i = 0 ; i < n; ++i) {
8
+ while (!window.empty () && nums[window.back ()] <= nums[i]) {
9
+ window.pop_back ();
10
+ }
11
+ window.push_back (i);
12
+ if (window.front () == i - k) {
13
+ window.pop_front ();
14
+ }
15
+ if (i >= k - 1 ) {
16
+ ans.push_back (nums[window.front ()]);
17
+ }
18
+ }
19
+ return ans;
20
+ }
21
+ };
Original file line number Diff line number Diff line change
1
+ func maxSlidingWindow (nums []int , k int ) []int {
2
+ ans := make ([]int , 0 , len (nums )- k + 1 )
3
+ window := make ([]int , 0 )
4
+ for i , num := range nums {
5
+ for len (window ) != 0 && nums [window [len (window )- 1 ]] <= num {
6
+ window = window [:len (window )- 1 ]
7
+ }
8
+ window = append (window , i )
9
+ if window [0 ] == i - k {
10
+ window = window [1 :]
11
+ }
12
+ if i >= k - 1 {
13
+ ans = append (ans , nums [window [0 ]])
14
+ }
15
+ }
16
+ return ans
17
+ }
Original file line number Diff line number Diff line change @@ -173,6 +173,81 @@ MaxQueue.prototype.pop_front = function () {
173
173
};
174
174
```
175
175
176
+ ### ** C++**
177
+
178
+ ``` cpp
179
+ class MaxQueue {
180
+ private:
181
+ queue<int > q;
182
+ deque<int > d;
183
+
184
+ public:
185
+ MaxQueue() {}
186
+
187
+ int max_value() {
188
+ if (d.empty()) return -1;
189
+ return d.front();
190
+ }
191
+
192
+ void push_back (int value) {
193
+ while (!d.empty() && d.back() < value) d.pop_back();
194
+ d.push_back(value);
195
+ q.push(value);
196
+ }
197
+
198
+ int pop_front() {
199
+ if (d.empty()) return -1;
200
+ int retVal = q.front();
201
+ q.pop();
202
+ if (d.front() == retVal) d.pop_front();
203
+ return retVal;
204
+ }
205
+ };
206
+ ```
207
+
208
+ ### **Go**
209
+
210
+ ```go
211
+ type MaxQueue struct {
212
+ queue []int
213
+ deque []int
214
+ }
215
+
216
+ func Constructor() MaxQueue {
217
+ return MaxQueue{
218
+ queue: make([]int, 0),
219
+ deque: make([]int, 0),
220
+ }
221
+ }
222
+
223
+ func (this *MaxQueue) Max_value() int {
224
+ if len(this.deque) == 0 {
225
+ return -1
226
+ }
227
+ return this.deque[0]
228
+ }
229
+
230
+ func (this *MaxQueue) Push_back(value int) {
231
+ for len(this.deque) != 0 && this.deque[len(this.deque)-1] < value {
232
+ this.deque = this.deque[:len(this.deque)-1]
233
+ }
234
+ this.deque = append(this.deque, value)
235
+ this.queue = append(this.queue, value)
236
+ }
237
+
238
+ func (this *MaxQueue) Pop_front() int {
239
+ if len(this.deque) == 0 {
240
+ return -1
241
+ }
242
+ retVal := this.queue[0]
243
+ this.queue = this.queue[1:]
244
+ if this.deque[0] == retVal {
245
+ this.deque = this.deque[1:]
246
+ }
247
+ return retVal
248
+ }
249
+ ```
250
+
176
251
### ** ...**
177
252
178
253
```
Original file line number Diff line number Diff line change
1
+ class MaxQueue {
2
+ private:
3
+ queue<int > q;
4
+ deque<int > d;
5
+
6
+ public:
7
+ MaxQueue () {}
8
+
9
+ int max_value () {
10
+ if (d.empty ()) return -1 ;
11
+ return d.front ();
12
+ }
13
+
14
+ void push_back (int value) {
15
+ while (!d.empty () && d.back () < value) d.pop_back ();
16
+ d.push_back (value);
17
+ q.push (value);
18
+ }
19
+
20
+ int pop_front () {
21
+ if (d.empty ()) return -1 ;
22
+ int retVal = q.front ();
23
+ q.pop ();
24
+ if (d.front () == retVal) d.pop_front ();
25
+ return retVal;
26
+ }
27
+ };
Original file line number Diff line number Diff line change
1
+ type MaxQueue struct {
2
+ queue []int
3
+ deque []int
4
+ }
5
+
6
+ func Constructor () MaxQueue {
7
+ return MaxQueue {
8
+ queue : make ([]int , 0 ),
9
+ deque : make ([]int , 0 ),
10
+ }
11
+ }
12
+
13
+ func (this * MaxQueue ) Max_value () int {
14
+ if len (this .deque ) == 0 {
15
+ return - 1
16
+ }
17
+ return this .deque [0 ]
18
+ }
19
+
20
+ func (this * MaxQueue ) Push_back (value int ) {
21
+ for len (this .deque ) != 0 && this .deque [len (this .deque )- 1 ] < value {
22
+ this .deque = this .deque [:len (this .deque )- 1 ]
23
+ }
24
+ this .deque = append (this .deque , value )
25
+ this .queue = append (this .queue , value )
26
+ }
27
+
28
+ func (this * MaxQueue ) Pop_front () int {
29
+ if len (this .deque ) == 0 {
30
+ return - 1
31
+ }
32
+ retVal := this .queue [0 ]
33
+ this .queue = this .queue [1 :]
34
+ if this .deque [0 ] == retVal {
35
+ this .deque = this .deque [1 :]
36
+ }
37
+ return retVal
38
+ }
You can’t perform that action at this time.
0 commit comments