增加注释和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
|
### 15. 3Sum
|
||||||
@@ -145,6 +151,22 @@ sum([i ** 2 for i in range(100) if i % 7 == 0])
|
|||||||
```python []
|
```python []
|
||||||
list(itertools.combinations([1,2,3,4], 3))
|
list(itertools.combinations([1,2,3,4], 3))
|
||||||
# [(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]
|
# [(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:
|
Note:
|
||||||
这道题其实也就两行代码,第一行是将people排序,第二行是在新数组中指定位置插入元素。
|
这道题其实也就两行代码,第一行是将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 🎉
|
## End 🎉
|
||||||
|
|
||||||
感谢聆听
|
|
||||||
|
|
||||||
- 本 Slide 地址: <https://yongyuancv.cn/files/leetcode-20230109/>
|
|
||||||
- Markdown 地址: <https://yongyuancv.cn/files/leetcode-20230109/20230109.md>
|
|
||||||
|
|||||||
Reference in New Issue
Block a user