File tree Expand file tree Collapse file tree 1 file changed +53
-0
lines changed
Expand file tree Collapse file tree 1 file changed +53
-0
lines changed Original file line number Diff line number Diff 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+ ```
You can’t perform that action at this time.
0 commit comments