update content

This commit is contained in:
labuladong
2023-08-06 14:13:28 +08:00
parent 34b67641cf
commit 67ffc1a1b9
5 changed files with 5 additions and 5 deletions

View File

@ -63,7 +63,7 @@
很遗憾并不是比如说把楼层变高一些100 层,给你 2 个鸡蛋,你在 50 层扔一下,碎了,那就只能线性扫描 149 层了,最坏情况下要扔 50 次。
如果不要「二分」,变成「五分」「十分」都会大幅减少最坏情况下的尝试次数。比方说第一个鸡蛋每隔十层楼扔,在哪里碎了第二个鸡蛋一个个线性扫描,总共不会超过 20 次。最优解其实是 14 次。最优策略非常多,而且并没有什么规律可言。
如果不要「二分」,变成「五分」「十分」都会大幅减少最坏情况下的尝试次数。比方说第一个鸡蛋每隔十层楼扔,在哪里碎了第二个鸡蛋一个个线性扫描,总共不会超过 20 次。最优解其实是 14 次。最优策略非常多,而且并没有什么规律可言。
说了这么多废话,就是确保大家理解了题目的意思,而且认识到这个题目确实复杂,就连我们手算都不容易,如何用算法解决呢?

View File

@ -253,7 +253,7 @@ class MyStack {
}
```
很明显,用队列实现栈的话,`pop` 操作时间复杂度是 O(N),其他操作都是 O(1)​。​
很明显,用队列实现栈的话,`pop` 操作时间复杂度是 O(N),其他操作都是 O(1)
个人认为,用队列实现栈是没啥亮点的问题,但是**用双栈实现队列是值得学习的**。

View File

@ -193,7 +193,7 @@ class Solution {
至此,这道题目就解决了,其实框架完全没有变,套路都是一样的,我们只是花了比较多的时间将滑动拼图游戏转化成 BFS 算法。
很多益智游戏都是这样,虽然看起来特别巧妙,但都架不住暴力穷举,常用的算法就是回溯算法或者 BFS 算法。
很多益智游戏都是这样,虽然看起来特别巧妙,但都架不住暴力穷举,常用的算法就是回溯算法或者 BFS 算法。

View File

@ -29,7 +29,7 @@
http://graphics.stanford.edu/~seander/bithacks.html
但是这些技巧大部分都过于晦涩,我觉得可以作为字典查阅,没必要逐条深究。但我认为那些有趣的、有用的位运算技巧,是我们每个人需要掌握的。
但是这些技巧大部分都过于晦涩,我觉得可以作为字典查阅,没必要逐条深究。但我认为那些有趣的、有用的位运算技巧,是我们每个人需要掌握的。
所以本文由浅入深,先展示几个有趣(但没卵用)的位运算技巧,然后再汇总一些在算法题以及工程开发中常用的位运算技巧。

View File

@ -133,7 +133,7 @@ class Solution {
算法的时间复杂度很容易计算,因为递归调用的次数是 `n`,每次递归调用都需要一次 for 循环,时间复杂度是 O(n),所以总的复杂度是 O(n^2)。
**最后,我们可以思考一个问题**:按照我们这个思路,得出的操作序列长度应该为 `2(n - 1)`,因为每次递归都要进行 2 次翻转并记录操作,总共有 `n` 层递归,但由于 base case 直接返回结果,不进行翻转,所以最终的操作序列长度应该是固定的 `2(n - 1)`
**最后,我们可以思考一个问题**:按照我们这个思路,得出的操作序列长度应该为 `2(n - 1)`,因为每次递归都要进行 2 次翻转并记录操作,总共有 `n` 层递归,但由于 base case 直接返回结果,不进行翻转,所以最终的操作序列长度应该是固定的 `2(n - 1)`
显然,这个结果不是最优的(最短的),比如说一堆煎饼 `[3,2,4,1]`,我们的算法得到的翻转序列是 `[3,4,2,3,1,2]`,但是最快捷的翻转方法应该是 `[2,3,4]`