Skip to content

Commit c10b154

Browse files
committed
feat(239): 更新单调队列的代码
1 parent 3e9b286 commit c10b154

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

basic/two-pointers/30.sliding-window-maximum.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,3 +388,56 @@ class Deque {
388388
}
389389
}
390390
```
391+
392+
单调队列 @feiker
393+
394+
JavaScript Code
395+
396+
```js
397+
var maxSlidingWindow = function (nums, k) {
398+
const res = [];
399+
const dequeue = new Dequeue();
400+
401+
// 前 k 个数据入队
402+
for (let i = 0; i < k - 1; i++) {
403+
dequeue.push(nums[i]);
404+
}
405+
406+
// 滑动窗口
407+
for (let i = k - 1; i < nums.length; i++) {
408+
dequeue.push(nums[i]);
409+
res.push(dequeue.front);
410+
dequeue.shift(nums[i - k + 1]);
411+
}
412+
return res;
413+
};
414+
415+
class Dequeue {
416+
constructor() {
417+
this.list = [];
418+
}
419+
420+
get front() {
421+
return this.list[0];
422+
}
423+
424+
get tail() {
425+
return this.list[this.list.length - 1];
426+
}
427+
428+
push(val) {
429+
const list = this.list;
430+
// 保证数据从队头到队尾递减
431+
while (this.tail < val) {
432+
list.pop();
433+
}
434+
list.push(val);
435+
}
436+
437+
// 队头出队
438+
shift(val) {
439+
// 这里的js实现shift()理论上复杂度应该是O(k), 就不去真实实现一个O(1)出队的队列了,意思到位即可
440+
if (this.front === val) this.list.shift();
441+
}
442+
}
443+
```

0 commit comments

Comments
 (0)