增加注释和c++sort,删去最后一页
This commit is contained in:
39
20230109.md
39
20230109.md
@@ -114,6 +114,12 @@ if 其他特殊情况:
|
||||
做该做的事情()
|
||||
```
|
||||
|
||||
Note:
|
||||
避免嵌套的基本思想就是early return,就是说进入函数之后,
|
||||
先处理特殊情况和各种边界情况,处理完之后直接return这个函数,也就是early return.
|
||||
最后再开始做函数该做的事情,一般来说这都是比较好的写法,如果你去看golang代码,
|
||||
你能看到大量这样的写法,这也是golang社区和官方建议的写法。
|
||||
|
||||
---
|
||||
|
||||
### 15. 3Sum
|
||||
@@ -145,6 +151,22 @@ sum([i ** 2 for i in range(100) if i % 7 == 0])
|
||||
```python []
|
||||
list(itertools.combinations([1,2,3,4], 3))
|
||||
# [(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]
|
||||
|
||||
Note:
|
||||
这题的解法其实也就一行,就是4-8行的这个列表生成式,那么列表生成式是什么捏。
|
||||
列表生成式又叫做List comprehensions, 这里有个例子,假设我们要求0到100所有能被7整除数的平方和,
|
||||
这个计算用列表生成式一行就能实现。首先最开始是个sum函数,sum函数里面是一个列表,
|
||||
这个列表是中的每一个元素都是i的平方,那么i从哪里来的呢,i是for i in range(100) 这个循环中出来的,
|
||||
并且i满足i除以7的余数是0这个条件。
|
||||
|
||||
回到4-8行,ret是一个集合,集合中每个元素是 **经过排序** 的 **元组** test,
|
||||
test从哪里来呢,test 是 第七行 这个for循环迭代出来的变量,并且这个test满足第八行的这个求和等于0的条件。
|
||||
|
||||
那么这个itertools.combinations是什么函数呢,它是标准库中提供的排列组合迭代器。
|
||||
下面给各位回忆一下高中排列组合的知识,假设我们有一个列表,列表中有元素1 2 3 4,每次取三个不同的元素,
|
||||
那么一共有多少中不同的排列组合呢。用combinations函数就能非常方便的帮我们遍历所有排列组合。
|
||||
|
||||
理论上,这题就这么可以解出来了,但是实际上是不行的
|
||||
```
|
||||
|
||||
---
|
||||
@@ -224,7 +246,7 @@ def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:
|
||||
|
||||
Note:
|
||||
这道题其实也就两行代码,第一行是将people排序,第二行是在新数组中指定位置插入元素。
|
||||
至于这么神奇的思路是怎么想到的,我只能说我也不知道,我自己写的很复杂有差不多100行。
|
||||
解题的关键就在利用了插入排序的特性,列表中后来插入的元素把之前插入的元素往后推一个位置。
|
||||
|
||||
但题外话我想提一下,
|
||||
我们写算法关注算法性能,这没问题,但我自己个人是把代码简洁度看得比性能更重的。
|
||||
@@ -269,9 +291,14 @@ int main() {
|
||||
|
||||
---
|
||||
|
||||
### C++ 标准库中的排序(以C11为例)
|
||||
|
||||
- 快速排序平均复杂度为 `$O(N log N)$` ,最坏情况下为 `$O(N^2)$`,快排递归带来额外开销
|
||||
- 堆排序比快排慢,但最坏情况下为 `$(N log N)$`
|
||||
- 插入排序在大致有序的情况下表现非常好
|
||||
|
||||
`std::sort` 实现了 Introspective sorting,集成了三种算法各自的优点
|
||||
|
||||
---
|
||||
|
||||
## End 🎉
|
||||
|
||||
感谢聆听
|
||||
|
||||
- 本 Slide 地址: <https://yongyuancv.cn/files/leetcode-20230109/>
|
||||
- Markdown 地址: <https://yongyuancv.cn/files/leetcode-20230109/20230109.md>
|
||||
|
||||
Reference in New Issue
Block a user