From 6f833722aead1e2d5ce35823fd64f3902f710f1a Mon Sep 17 00:00:00 2001 From: youngyangyang04 <826123027@qq.com> Date: Sun, 30 Aug 2020 07:29:27 +0800 Subject: [PATCH] Update --- README.md | 20 ++++-- pics/657.机器人能否返回原点.png | Bin 0 -> 22731 bytes problems/0017.电话号码的字母组合.md | 8 +-- problems/0018.四数之和.md | 17 ++++- problems/0027.移除元素.md | 4 +- problems/0059.螺旋矩阵II.md | 62 ++++++++++++++--- problems/0209.长度最小的子数组.md | 68 +++++++++++++++---- problems/0332.重新安排行程.md | 9 +-- problems/0657.机器人能否返回原点.md | 38 +++++++++++ 9 files changed, 184 insertions(+), 42 deletions(-) create mode 100644 pics/657.机器人能否返回原点.png create mode 100644 problems/0657.机器人能否返回原点.md diff --git a/README.md b/README.md index 43cc7ebe..9b345f32 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,8 @@ * [哈希表:这道题目我做过?](https://mp.weixin.qq.com/s/sYZIR4dFBrw_lr3eJJnteQ) * [哈希表:解决了两数之和,那么能解决三数之和么?](https://mp.weixin.qq.com/s/r5cgZFu0tv4grBAexdcd8A) * [双指针法:一样的道理,能解决四数之和](https://mp.weixin.qq.com/s/nQrcco8AZJV1pAOVjeIU_g) +* [数组:每次遇到二分法,都是一看就会,一写就废](https://mp.weixin.qq.com/s/fCf5QbPDtE6SSlZ1yh_q8Q) +* [数组:就移除个元素很难么?](https://mp.weixin.qq.com/s/wj0T-Xs88_FHJFwayElQlA) * 精选链表相关的面试题 * 精选字符串相关的面试题 * 精选栈与队列相关的面试题 @@ -82,6 +84,10 @@ * [0219.存在重复元素II](https://github.com/youngyangyang04/leetcode/blob/master/problems/0219.存在重复元素II.md) * 0220.存在重复元素III +* 循环不变量原则 + * [0035.搜索插入位置](https://mp.weixin.qq.com/s/fCf5QbPDtE6SSlZ1yh_q8Q) + * [0059.螺旋矩阵II](https://github.com/youngyangyang04/leetcode/blob/master/problems/0059.螺旋矩阵II.md) + * 字符串经典题目 * [0344.反转字符串](https://github.com/youngyangyang04/leetcode/blob/master/problems/0344.反转字符串.md) * [0541.反转字符串II](https://github.com/youngyangyang04/leetcode/blob/master/problems/0541.反转字符串II.md) @@ -92,11 +98,12 @@ * [0459.重复的子字符串](https://github.com/youngyangyang04/leetcode/blob/master/problems/0459.重复的子字符串.md) * 双指针法经典题目 - * [0015.三数之和](https://github.com/youngyangyang04/leetcode/blob/master/problems/0015.三数之和.md) - * [0018.四数之和](https://github.com/youngyangyang04/leetcode/blob/master/problems/0018.四数之和.md) + * [0027.移除元素](https://mp.weixin.qq.com/s/wj0T-Xs88_FHJFwayElQlA) + * [0015.三数之和](https://mp.weixin.qq.com/s/r5cgZFu0tv4grBAexdcd8A) + * [0018.四数之和](https://mp.weixin.qq.com/s/nQrcco8AZJV1pAOVjeIU_g) * [0026.删除排序数组中的重复项](https://github.com/youngyangyang04/leetcode/blob/master/problems/0026.删除排序数组中的重复项.md) - * [0206.翻转链表](https://github.com/youngyangyang04/leetcode/blob/master/problems/0206.翻转链表.md) - * [0142.环形链表II](https://github.com/youngyangyang04/leetcode/blob/master/problems/0142.环形链表II.md) + * [0206.翻转链表](https://mp.weixin.qq.com/s/pnvVP-0ZM7epB8y3w_Njwg) + * [0142.环形链表II](https://mp.weixin.qq.com/s/_QVP3IkRZWx9zIpQRgajzA) * [0344.反转字符串](https://github.com/youngyangyang04/leetcode/blob/master/problems/0344.反转字符串.md) * [剑指Offer05.替换空格](https://github.com/youngyangyang04/leetcode/blob/master/problems/剑指Offer05.替换空格.md) @@ -400,7 +407,7 @@ int countNodes(TreeNode* root) { |[0205.同构字符串](https://github.com/youngyangyang04/leetcode/blob/master/problems/0205.同构字符串.md) |哈希表 |简单| **哈希**| |[0206.翻转链表](https://github.com/youngyangyang04/leetcode/blob/master/problems/0206.翻转链表.md) |链表 |简单| **双指针法** **递归**| |[0209.长度最小的子数组](https://github.com/youngyangyang04/leetcode/blob/master/problems/0209.长度最小的子数组.md) |数组 |中等| **暴力** **滑动窗口**| -|[0216.组合总和III](https://github.com/youngyangyang04/leetcode/blob/master/problems/0216.组合总和III.md) |数组/回溯 |中等| **回溯**| +|[0216.组合总和III](https://github.com/youngyangyang04/leetcode/blob/master/problems/0216.组合总和III.md) |数组/回溯 |中等| **回溯算法**| |[0219.存在重复元素II](https://github.com/youngyangyang04/leetcode/blob/master/problems/0219.存在重复元素II.md) | 哈希表 |简单| **哈希** | |[0222.完全二叉树的节点个数](https://github.com/youngyangyang04/leetcode/blob/master/problems/0222.完全二叉树的节点个数.md) | 树 |简单| **递归** | |[0225.用队列实现栈](https://github.com/youngyangyang04/leetcode/blob/master/problems/0225.用队列实现栈.md) | 队列 |简单| **队列** | @@ -409,6 +416,7 @@ int countNodes(TreeNode* root) { |[0237.删除链表中的节点](https://github.com/youngyangyang04/leetcode/blob/master/problems/0237.删除链表中的节点.md) |链表 |简单| **原链表移除** **添加虚拟节点** 递归| |[0239.滑动窗口最大值](https://github.com/youngyangyang04/leetcode/blob/master/problems/0239.滑动窗口最大值.md) |滑动窗口/队列 |困难| **单调队列**| |[0242.有效的字母异位词](https://github.com/youngyangyang04/leetcode/blob/master/problems/0242.有效的字母异位词.md) |哈希表 |简单| **哈希**| +|[0332.重新安排行程](https://github.com/youngyangyang04/leetcode/blob/master/problems/0332.重新安排行程.md) |深度优先搜索/回溯 |中等| **深度优先搜索/回溯算法**| |[0344.反转字符串](https://github.com/youngyangyang04/leetcode/blob/master/problems/0344.反转字符串.md) |字符串 |简单| **双指针**| |[0347.前K个高频元素](https://github.com/youngyangyang04/leetcode/blob/master/problems/0347.前K个高频元素.md) |哈希/堆/优先级队列 |中等| **哈希/优先级队列**| |[0349.两个数组的交集](https://github.com/youngyangyang04/leetcode/blob/master/problems/0349.两个数组的交集.md) |哈希表 |简单|**哈希**| @@ -418,7 +426,7 @@ int countNodes(TreeNode* root) { |[0450.删除二叉搜索树中的节点](https://github.com/youngyangyang04/leetcode/blob/master/problems/0450.删除二叉搜索树中的节点.md) |树 |中等|**递归**| |[0454.四数相加II](https://github.com/youngyangyang04/leetcode/blob/master/problems/0454.四数相加II.md) |哈希表 |中等| **哈希**| |[0459.重复的子字符串](https://github.com/youngyangyang04/leetcode/blob/master/problems/0459.重复的子字符串.md) |字符创 |简单| **KMP**| -|[0491.递增子序列](https://github.com/youngyangyang04/leetcode/blob/master/problems/0491.递增子序列.md) |深度优先搜索 |中等|**深度优先搜索/回溯**| +|[0491.递增子序列](https://github.com/youngyangyang04/leetcode/blob/master/problems/0491.递增子序列.md) |深度优先搜索 |中等|**深度优先搜索/回溯算法**| |[0541.反转字符串II](https://github.com/youngyangyang04/leetcode/blob/master/problems/0541.反转字符串II.md) |字符串 |简单| **模拟**| |[0575.分糖果](https://github.com/youngyangyang04/leetcode/blob/master/problems/0575.分糖果.md) |哈希表 |简单|**哈希**| |[0617.合并二叉树](https://github.com/youngyangyang04/leetcode/blob/master/problems/0617.合并二叉树.md) |树 |简单|**递归** **迭代**| diff --git a/pics/657.机器人能否返回原点.png b/pics/657.机器人能否返回原点.png new file mode 100644 index 0000000000000000000000000000000000000000..6ea5b69b2b480e04ad448e6f10fd27c61e15f8d5 GIT binary patch literal 22731 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 + 很明显暴力解法的时间复杂度是O(n^2),这道题目暴力解法在leetcode上是可以过的。 @@ -73,7 +73,7 @@ public: 删除过程如下: - + **双指针法(快慢指针法)在数组和链表的操作中是非常常见的,很多考察数组和链表操作的面试题,都使用双指针法。** diff --git a/problems/0059.螺旋矩阵II.md b/problems/0059.螺旋矩阵II.md index 48c4025c..c5c3301a 100644 --- a/problems/0059.螺旋矩阵II.md +++ b/problems/0059.螺旋矩阵II.md @@ -1,26 +1,66 @@ > 笔者在BAT从事技术研发多年,利用工作之余重刷leetcode,更多原创文章请关注公众号「代码随想录」。 -## 题目地址 +# 题目地址 https://leetcode-cn.com/problems/spiral-matrix-ii/ -## 思路 +> 一进循环深似海,从此offer是路人 -模拟顺时针画矩阵的过程 +# 题目59.螺旋矩阵II -填充上行从左到右 -填充右列从上到下 -填充下行从右到左 -填充左列从下到上 +给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 -在模拟的过程中最重要的思想是**保持画每一条边的原则一致,即每次都是左闭右开的原则**,如果所示 +示例: + +输入: 3 +输出: +[ + [ 1, 2, 3 ], + [ 8, 9, 4 ], + [ 7, 6, 5 ] +] + +# 思路 + +这道题目可以说在面试中出现频率较高的题目,**本题并不涉及到什么算法,就是模拟过程,但却十分考察对代码的掌控能力。** + +要如何画出这个螺旋排列的正方形矩阵呢? + +相信很多同学刚开始做这种题目的时候,上来就是一波判断猛如虎。 + +结果运行的时候各种问题,然后开始各种修修补补,最后发现改了这里哪里有问题,改了那里这里又跑不起来了。 + +大家还记得我们在这篇文章[数组:每次遇到二分法,都是一看就会,一写就废](https://mp.weixin.qq.com/s/fCf5QbPDtE6SSlZ1yh_q8Q)中讲解了二分法,提到如果要写出正确的二分法一定要坚持**循环不变量原则**。 + +而求解本题依然是要坚持循环不变量原则。 + +模拟顺时针画矩阵的过程: + +* 填充上行从左到右 +* 填充右列从上到下 +* 填充下行从右到左 +* 填充左列从下到上 + +由外向内一圈一圈这么画下去。 + +可以发现这里的边界条件非常多,在一个循环中,如此多的边界条件,如果不按照固定规则来遍历,那就是**一进循环深似海,从此offer是路人**。 + +这里一圈下来,我们要画每四条边,这四条边怎么画,每画一条边都要坚持一致的左闭右开,或者左开又闭的原则,这样这一圈才能按照统一的规则画下来。 + +那么我按照左闭右开的原则,来画一圈,大家看一下: -很多同学,做这道题目之所以一直写不好,代码越写越乱,就是因为 在画每一条边的时候,没有保证统一原则 +这里每一种颜色,代表一条边,我们遍历的长度,可以看出每一个拐角处的处理规则,拐角处让给新的一条边来继续画。 -例如:模拟矩阵上边的时候 左闭右开,然后模拟矩阵右列的时候又开始了左闭又闭,那岂能不乱 +这也是坚持了每条边左闭右开的原则。 -## 解法 +一些同学做这道题目之所以一直写不好,代码越写越乱。 + +就是因为在画每一条边的时候,一会左开又闭,一会左闭右闭,一会又来左闭右开,岂能不乱。 + +代码如下,已经详细注释了每一步的目的,可以看出while循环里判断的情况是很多的,代码里处理的原则也是统一的左闭右开。 + +# C++代码 ```C++ class Solution { diff --git a/problems/0209.长度最小的子数组.md b/problems/0209.长度最小的子数组.md index 47049a0a..f206d641 100644 --- a/problems/0209.长度最小的子数组.md +++ b/problems/0209.长度最小的子数组.md @@ -1,19 +1,25 @@ ## 题目地址 https://leetcode-cn.com/problems/minimum-size-subarray-sum/ -## 思路 +> 滑动窗口拯救了你 + +# 题目209.长度最小的子数组 + +给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。 + +示例: + +输入:s = 7, nums = [2,3,1,2,4,3] +输出:2 +解释:子数组 [4,3] 是该条件下的长度最小的子数组。 + + +# 暴力解法 + 这道题目暴力解法当然是 两个for循环,然后不断的寻找符合条件的子序列,时间复杂度很明显是O(n^2) 。 -还可以使用滑动窗口的细想来做这道题。所谓滑动窗口,**就是不断的调节子序列的起始位置,从而得出我们要想的结果** - -这里还是以题目中的示例来举例,s=7, 数组是 2,3,1,2,4,3,来看一下动画效果: - - - 代码如下: -## 暴力解法 - ``` class Solution { public: @@ -27,7 +33,6 @@ public: sum += nums[j]; if (sum >= s) { // 一旦发现子序列和超过了s,更新result subLength = j - i + 1; // 取子序列的长度 - // result取 result和subLength最小的那个 result = result < subLength ? result : subLength; break; // 因为我们是找符合条件最短的子序列,所以一旦符合条件就break } @@ -38,12 +43,45 @@ public: } }; ``` +时间复杂度:O(n^2) +空间复杂度:O(1) -## 滑动窗口 +# 滑动窗口 + +接下来就开始介绍数组操作中另一个重要的方法:**滑动窗口**。 + +所谓滑动窗口,**就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果**。 + +这里还是以题目中的示例来举例,s=7, 数组是 2,3,1,2,4,3,来看一下查找的过程: + + + +最后找到 4,3 是最短距离。 + +其实从动画中可以发现滑动窗口也可以理解为双指针法的一种!只不过这种解法更像是一个窗口的移动,所以叫做滑动窗口更适合一些。 + +在本题中实现滑动窗口,主要确定如下三点: + +* 窗口内是什么? +* 如何移动窗口的起始位置? +* 如何移动窗口的结束位置? + +窗口就是 满足其和 ≥ s 的长度最小的 连续 子数组。 + +窗口的起始位置如何移动:如果当前窗口的值大于s了,窗口就要向前移动了(也就是该缩小了)。 + +窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,窗口的起始位置设置为数组的起始位置就可以了。 + +解题的关键在于 窗口的起始位置如何移动,如图所示: + +可以发现**滑动窗口的精妙之处在于根据当前子序列和大小的情况,不断调节子序列的起始位置。从而将O(n^2)的暴力解法降为O(n)。** + + +# C++滑动窗口代码 + ``` -// 滑动窗口 class Solution { public: int minSubArrayLen(int s, vector& nums) { @@ -56,7 +94,6 @@ public: // 注意这里使用while,每次更新 i(起始位置),并不断比较子序列是否符合条件 while (sum >= s) { subLength = (j - i + 1); // 取子序列的长度 - // result取 result和subLength最小的那个 result = result < subLength ? result : subLength; sum -= nums[i++]; // 这里体现出滑动窗口的精髓之处,不断变更i(子序列的起始位置) } @@ -67,5 +104,8 @@ public: }; ``` -> 更过算法干货文章持续更新,可以微信搜索「代码随想录」第一时间围观,关注后,回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。 +时间复杂度:O(n) +空间复杂度:O(1) + +> 更多算法干货文章持续更新,可以微信搜索「代码随想录」第一时间围观,关注后,回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。 diff --git a/problems/0332.重新安排行程.md b/problems/0332.重新安排行程.md index ab2a9ee2..a2a318e4 100644 --- a/problems/0332.重新安排行程.md +++ b/problems/0332.重新安排行程.md @@ -94,15 +94,15 @@ class Solution { private: // unordered_map<出发城市, map<到达城市, 航班次数>> targets unordered_map> targets; -bool backtracking(int ticketNum, int index, vector& result) { - if (index == ticketNum + 1) { +bool backtracking(int ticketNum, vector& result) { + if (result.size() == ticketNum + 1) { return true; } for (pair& target : targets[result[result.size() - 1]]) { if (target.second > 0 ) { // 使用int字段来记录到达城市是否使用过了 result.push_back(target.first); target.second--; - if (backtracking(ticketNum, index + 1, result)) return true; + if (backtracking(ticketNum, result)) return true; result.pop_back(); target.second++; } @@ -116,9 +116,10 @@ public: targets[vec[0]][vec[1]]++; // 记录映射关系 } result.push_back("JFK"); - backtracking(tickets.size(), 1, result); + backtracking(tickets.size(), result); return result; } }; + ``` diff --git a/problems/0657.机器人能否返回原点.md b/problems/0657.机器人能否返回原点.md new file mode 100644 index 00000000..fb74c751 --- /dev/null +++ b/problems/0657.机器人能否返回原点.md @@ -0,0 +1,38 @@ +## 题目地址 +https://leetcode-cn.com/problems/robot-return-to-origin/ + +## 思路 + +这道题目还是挺简单的,大家不要想复杂了,一波哈希法又一波图论算法啥的,哈哈。 + +其实就是,x,y坐标,初始为0,然后: +* if (moves[i] == 'U') y++; +* if (moves[i] == 'D') y--; +* if (moves[i] == 'L') x--; +* if (moves[i] == 'R') x++; + +最后判断一下x,y是否回到了(0, 0)位置就可以了。 + +如图所示: + + +## C++代码 + +``` +class Solution { +public: + bool judgeCircle(string moves) { + int x = 0, y = 0; + for (int i = 0; i < moves.size(); i++) { + if (moves[i] == 'U') y++; + if (moves[i] == 'D') y--; + if (moves[i] == 'L') x--; + if (moves[i] == 'R') x++; + } + if (x == 0 && y == 0) return true; + return false; + } +}; +``` + +> 更多算法干货文章持续更新,可以微信搜索「代码随想录」第一时间围观,关注后,回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。