|
1914 | 1914 | "pre": [
|
1915 | 1915 | {
|
1916 | 1916 | "text": "贪心",
|
1917 |
| - "link": "../thinkings/greedy.md", |
| 1917 | + "link": "https://github.com/azl397985856/leetcode/blob/master/thinkings/greedy.md", |
1918 | 1918 | "color": "purple"
|
1919 | 1919 | }
|
1920 | 1920 | ],
|
|
2146 | 2146 | },
|
2147 | 2147 | {
|
2148 | 2148 | "text": "动态规划",
|
2149 |
| - "link": "../thinkings/dynamic-programming.md", |
| 2149 | + "link": "https://github.com/azl397985856/leetcode/blob/master/thinkings/dynamic-programming.md", |
2150 | 2150 | "color": "red"
|
2151 | 2151 | }
|
2152 | 2152 | ],
|
|
5357 | 5357 | "pre": [
|
5358 | 5358 | {
|
5359 | 5359 | "text": "前缀树",
|
5360 |
| - "link": "../thinkings/trie.md", |
| 5360 | + "link": "https://github.com/azl397985856/leetcode/blob/master/thinkings/trie.md", |
5361 | 5361 | "color": "purple"
|
5362 | 5362 | }
|
5363 | 5363 | ],
|
|
5405 | 5405 | "pre": [
|
5406 | 5406 | {
|
5407 | 5407 | "text": "滑动窗口",
|
5408 |
| - "link": "../thinkings/slide-window.md", |
| 5408 | + "link": "https://github.com/azl397985856/leetcode/blob/master/thinkings/slide-window.md", |
5409 | 5409 | "color": "purple"
|
5410 | 5410 | }
|
5411 | 5411 | ],
|
|
5453 | 5453 | "pre": [
|
5454 | 5454 | {
|
5455 | 5455 | "text": "前缀树",
|
5456 |
| - "link": "../thinkings/trie.md", |
| 5456 | + "link": "https://github.com/azl397985856/leetcode/blob/master/thinkings/trie.md", |
5457 | 5457 | "color": "purple"
|
5458 | 5458 | }
|
5459 | 5459 | ],
|
|
5499 | 5499 | "pre": [
|
5500 | 5500 | {
|
5501 | 5501 | "text": "前缀树",
|
5502 |
| - "link": "../thinkings/trie.md", |
| 5502 | + "link": "https://github.com/azl397985856/leetcode/blob/master/thinkings/trie.md", |
5503 | 5503 | "color": "purple"
|
5504 | 5504 | },
|
5505 | 5505 | {
|
5506 | 5506 | "text": "深度优先遍历",
|
5507 |
| - "link": "../thinkings/DFS.md", |
| 5507 | + "link": "https://github.com/azl397985856/leetcode/blob/master/thinkings/DFS.md", |
5508 | 5508 | "color": "geekblue"
|
5509 | 5509 | },
|
5510 | 5510 | {
|
5511 | 5511 | "text": "小岛专题",
|
5512 |
| - "link": "../thinkings/island.md", |
| 5512 | + "link": "https://github.com/azl397985856/leetcode/blob/master/thinkings/island.md", |
5513 | 5513 | "color": "purple"
|
5514 | 5514 | },
|
5515 | 5515 | {
|
|
6071 | 6071 | "code": [
|
6072 | 6072 | {
|
6073 | 6073 | "language": "js",
|
6074 |
| - "text": "\nvar maxSlidingWindow = function(nums, k) {\n // bad 时间复杂度O(n * k)\n if (nums.length === 0 || k === 0) return [];\n let slideWindow = [];\n const ret = [];\n for (let i = 0; i < nums.length - k + 1; i++) {\n for (let j = 0; j < k; j++) {\n slideWindow.push(nums[i + j]);\n }\n ret.push(Math.max(...slideWindow));\n slideWindow = [];\n }\n return ret;\n};\n" |
| 6074 | + "text": "\nvar maxSlidingWindow = function (nums, k) {\n // bad 时间复杂度O(n * k)\n if (nums.length === 0 || k === 0) return [];\n let slideWindow = [];\n const ret = [];\n for (let i = 0; i < nums.length - k + 1; i++) {\n for (let j = 0; j < k; j++) {\n slideWindow.push(nums[i + j]);\n }\n ret.push(Math.max(...slideWindow));\n slideWindow = [];\n }\n return ret;\n};\n" |
6075 | 6075 | },
|
6076 | 6076 | {
|
6077 | 6077 | "language": "js",
|
6078 |
| - "text": "\nvar maxSlidingWindow = function(nums, k) {\n // 双端队列优化时间复杂度, 时间复杂度O(n)\n const deque = []; // 存放在接下来的滑动窗口可能成为最大值的数\n const ret = [];\n for (let i = 0; i < nums.length; i++) {\n // 清空失效元素\n while (deque[0] < i - k + 1) {\n deque.shift();\n }\n\n while (nums[deque[deque.length - 1]] < nums[i]) {\n deque.pop();\n }\n\n deque.push(i);\n\n if (i >= k - 1) {\n ret.push(nums[deque[0]]);\n }\n }\n return ret;\n};\n" |
| 6078 | + "text": "\nvar maxSlidingWindow = function (nums, k) {\n // 双端队列优化时间复杂度, 时间复杂度O(n)\n const deque = []; // 存放在接下来的滑动窗口可能成为最大值的数\n const ret = [];\n for (let i = 0; i < nums.length; i++) {\n // 清空失效元素\n while (deque[0] < i - k + 1) {\n deque.shift();\n }\n\n while (nums[deque[deque.length - 1]] < nums[i]) {\n deque.pop();\n }\n\n deque.push(i);\n\n if (i >= k - 1) {\n ret.push(nums[deque[0]]);\n }\n }\n return ret;\n};\n" |
6079 | 6079 | },
|
6080 | 6080 | {
|
6081 | 6081 | "language": "py",
|
6082 | 6082 | "text": "\nclass Solution:\n def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:\n if k == 0: return []\n res = []\n for r in range(k - 1, len(nums)):\n res.append(max(nums[r - k + 1:r + 1]))\n return res\n"
|
6083 | 6083 | },
|
6084 | 6084 | {
|
6085 | 6085 | "language": "py",
|
6086 |
| - "text": "\nclass Solution:\n def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:\n deque, res, n = [], [], len(nums)\n for i in range(n):\n while deque and deque[0] < i - k + 1:\n deque.pop(0)\n while deque and nums[i] > nums[deque[-1]]:\n deque.pop(-1)\n deque.append(i)\n if i >= k - 1: res.append(nums[deque[0]])\n return res\n\n\n" |
| 6086 | + "text": "\nclass Solution:\n def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:\n deque, res, n = collections.deque(), [], len(nums)\n for i in range(n):\n # 移除前面实现的元素,整因为如此,才需要双端队列\n while deque and deque[0] < i - k + 1:\n deque.popleft()\n # 下面三行,类似单调递增栈\n while deque and nums[i] > nums[deque[-1]]:\n deque.pop()\n deque.append(i)\n if i >= k - 1:\n res.append(nums[deque[0]])\n return res\n" |
6087 | 6087 | }
|
6088 | 6088 | ]
|
6089 | 6089 | },
|
|
6719 | 6719 | "color": "blue"
|
6720 | 6720 | },
|
6721 | 6721 | {
|
6722 |
| - "text": "对于这种$O(1)$空间复杂度有固定的套路。常见的有:1.直接修改原数组2.滑动窗口(当前状态并不是和之前所有状态有关,而是仅和某几个有关)。我们采用的是滑动窗口。但是难点就在于我们怎么知道当前状态和哪几个有关。对于这道题来说,画图或许可以帮助你打开思路。另外面试的时候说出$O(N)$的思路也不失为一个帮助你冷静分析问题的手段。", |
| 6722 | + "text": "对于这种$$O(1)$$空间复杂度有固定的套路。常见的有:1.直接修改原数组2.滑动窗口(当前状态并不是和之前所有状态有关,而是仅和某几个有关)。我们采用的是滑动窗口。但是难点就在于我们怎么知道当前状态和哪几个有关。对于这道题来说,画图或许可以帮助你打开思路。另外面试的时候说出$$O(N)$$的思路也不失为一个帮助你冷静分析问题的手段。", |
6723 | 6723 | "link": null,
|
6724 | 6724 | "color": "blue"
|
6725 | 6725 | }
|
|
7511 | 7511 | "pre": [
|
7512 | 7512 | {
|
7513 | 7513 | "text": "前缀树",
|
7514 |
| - "link": "../thinkings/trie.md", |
| 7514 | + "link": "https://github.com/azl397985856/leetcode/blob/master/thinkings/trie.md", |
7515 | 7515 | "color": "purple"
|
7516 | 7516 | }
|
7517 | 7517 | ],
|
|
8443 | 8443 | "pre": [
|
8444 | 8444 | {
|
8445 | 8445 | "text": "前缀树",
|
8446 |
| - "link": "../thinkings/trie.md", |
| 8446 | + "link": "https://github.com/azl397985856/leetcode/blob/master/thinkings/trie.md", |
8447 | 8447 | "color": "purple"
|
8448 | 8448 | }
|
8449 | 8449 | ],
|
|
8899 | 8899 | "pre": [
|
8900 | 8900 | {
|
8901 | 8901 | "text": "滑动窗口",
|
8902 |
| - "link": "../thinkings/slide-window.md", |
| 8902 | + "link": "https://github.com/azl397985856/leetcode/blob/master/thinkings/slide-window.md", |
8903 | 8903 | "color": "purple"
|
8904 | 8904 | }
|
8905 | 8905 | ],
|
|
9284 | 9284 | "pre": [
|
9285 | 9285 | {
|
9286 | 9286 | "text": "前缀树",
|
9287 |
| - "link": "../thinkings/trie.md", |
| 9287 | + "link": "https://github.com/azl397985856/leetcode/blob/master/thinkings/trie.md", |
9288 | 9288 | "color": "purple"
|
9289 | 9289 | }
|
9290 | 9290 | ],
|
|
9846 | 9846 | "pre": [
|
9847 | 9847 | {
|
9848 | 9848 | "text": "前缀和",
|
9849 |
| - "link": "../thinkings/prefix.md", |
| 9849 | + "link": "https://github.com/azl397985856/leetcode/blob/master/thinkings/prefix.md", |
9850 | 9850 | "color": "cyan"
|
9851 | 9851 | }
|
9852 | 9852 | ],
|
|
9951 | 9951 | "pre": [
|
9952 | 9952 | {
|
9953 | 9953 | "text": "前缀和",
|
9954 |
| - "link": "../thinkings/prefix.md", |
| 9954 | + "link": "https://github.com/azl397985856/leetcode/blob/master/thinkings/prefix.md", |
9955 | 9955 | "color": "cyan"
|
9956 | 9956 | },
|
9957 | 9957 | {
|
|
10139 | 10139 | },
|
10140 | 10140 | {
|
10141 | 10141 | "text": "深度优先遍历",
|
10142 |
| - "link": "../thinkings/DFS.md", |
| 10142 | + "link": "https://github.com/azl397985856/leetcode/blob/master/thinkings/DFS.md", |
10143 | 10143 | "color": "geekblue"
|
10144 | 10144 | },
|
10145 | 10145 | {
|
|
10183 | 10183 | },
|
10184 | 10184 | {
|
10185 | 10185 | "text": "二叉树的遍历",
|
10186 |
| - "link": "../thinkings/binary-tree-traversal.md", |
| 10186 | + "link": "https://github.com/azl397985856/leetcode/blob/master/thinkings/binary-tree-traversal.md", |
10187 | 10187 | "color": "red"
|
10188 | 10188 | }
|
10189 | 10189 | ],
|
|
0 commit comments