From 49120378d477daea7e555854f587028234483dba Mon Sep 17 00:00:00 2001 From: heimoshuiyu Date: Sat, 7 Jan 2023 22:12:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B3=A8=E9=87=8A=E5=92=8Cc+?= =?UTF-8?q?+sort,=E5=88=A0=E5=8E=BB=E6=9C=80=E5=90=8E=E4=B8=80=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 20230109.md | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/20230109.md b/20230109.md index 497ea4db..28daf789 100644 --- a/20230109.md +++ b/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 地址: -- Markdown 地址: