更新目录

This commit is contained in:
YDZ
2020-02-18 13:12:52 +08:00
parent 9aa78a404b
commit a797076a53
2 changed files with 7 additions and 2 deletions

View File

@ -32,5 +32,10 @@ Note:
## 解题思路
- 这道题比较巧的思路是,将这些数字想象成链表中的结点,数组中数字代表下一个结点的数组下标。找重复的数字就是找链表中成环的那个点。由于题目保证了一定会有重复的数字,所以一定会成环。所以用快慢指针的方法,快指针一次走 2 步,慢指针一次走 1 步,相交以后,快指针从头开始,每次走一步,再次遇见的时候就是成环的交点处,也即是重复数字所在的地方。
- 这一题有多种做法。可以用快慢指针求解。还可以用二分搜索,题目中规定,给出 [1n] 个数,如果每个数都不重复,那么就有 `n + 1` 个数。以 [1, 2, 2, 3, 4, 5, 6, 7] 为例,一共有 8 个数,每个数都在 1 和 7 之间。1 和 7 的中位数是 4遍历整个数组统计小于 4 的整数的个数,至多为 3 个,如果超过 3 个就说明重复的数存在于区间 `[1,4)` 中;否则,重复的数存在于区间 `[4,7]` 中。这里小于 4 的整数有 4 个(它们是 1, 2, 2, 3因此砍掉右半区间连中位数也去掉。如此反复最后二分区间越来越小直到变成 1 个整数,这个整数就是我们要找的重复的数。
- 这一题有多种做法。可以用快慢指针求解。还可以用二分搜索(这里的题解感谢 [@imageslr](https://github.com/imageslr) 指出错误):
1. 假设有 n+1 个数,则可能重复的数位于区间 [1, n] 中。记该区间最小值、最大值和中间值为 low、high、mid
2. 遍历整个数组,统计小于等于 mid 的整数的个数,至多为 mid 个
3. 如果超过 mid 个就说明重复的数存在于区间 [low,mid] (闭区间)中;否则,重复的数存在于区间 (mid, high] (左开右闭)中
4. 缩小区间,继续重复步骤 2、3直到区间变成 1 个整数,即 low == high
5. 整数 low 就是要找的重复的数
- 另外一个做法是,先将数组排序,依照下标是从 0 开始递增的特性,那么数组里面的数字与下标的差值应该是越来越大。如果出现了相同的数字,下标变大,差值应该比前一个数字小,出现了这个情况就说明找到了相同数字了。

View File

@ -954,7 +954,7 @@
| 0884 | Uncommon Words from Two Sentences |[Go](https://github.com/halfrost/LeetCode-Go/tree/master/Algorithms/0884.%20Uncommon%20Words%20from%20Two%20Sentences) | 60.90% | Easy | |
| 0885 | Spiral Matrix III | [Go](https://github.com/halfrost/LeetCode-Go/tree/master/Algorithms/0885.%20Spiral%20Matrix%20III) | 64.40% | Medium | |
| 0886 | Possible Bipartition | | 40.90% | Medium | |
| 0887 | Super Egg Drop | | 24.80% | Hard | |
| 0887 | Super Egg Drop |[Go](https://github.com/halfrost/LeetCode-Go/tree/master/Algorithms/0887.%20Super%20Egg%20Drop) | 24.80% | Hard | |
| 0888 | Fair Candy Swap | | 56.80% | Easy | |
| 0889 | Construct Binary Tree from Preorder and Postorder Traversal | | 60.30% | Medium | |
| 0890 | Find and Replace Pattern | | 71.30% | Medium | |