增加注释和c++sort,删去最后一页

This commit is contained in:
2023-01-07 22:12:27 +08:00
parent 39604791e9
commit 49120378d4

View File

@@ -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>