把 O(n²) 的判重改成 O(n)

下面这段去重用的是列表判重(每次都要挨个比)。把它改成用集合判重,结果必须一样。 改完之后输出去重后还剩几个。

开始练习 →

把重复计算提到循环外

下面的代码在循环里反复调用同一个开销大的函数,而它的结果每次都一样。 把它提到循环外面去,然后输出这个函数被调用了几次。

开始练习 →

⚠️ 优化前后结果必须一致

优化最容易犯的错是把行为也改了。 补全代码:慢版(列表判重)和快版(集合判重)各跑一遍,比较两者的结果是否完全相同,相同输出 结果一致,否则输出 结果不一致。

开始练习 →

这次优化到底提了多少

补全 speedup:返回 200 条数据时,列表判重的比较次数是集合的多少倍(整除)。 这个数就是这次优化的收益——有数才叫优化,没数只是改写。

开始练习 →

大数据下最怕什么

数据量上来之后,最怕代码里【0】。

开始练习 →

哈希表什么时候会退化

哈希表也不是永远 O(1),它在【0】的时候会退化。

开始练习 →

小数据上两种做法差多少

只有 10 条数据时,两种判重的比较次数。运行下面这段程序: def list_ops(n): ops = 0 seen = [] for i in range(n): for y in seen:

开始练习 →

数据量上来之后呢

换成 200 条。运行下面这段程序: def list_ops(n): ops = 0 seen = [] for i in range(n): for y in seen:

开始练习 →

空输入不能崩

补全 distinct:返回不重复元素的个数。 这次喂给它一个空列表,不能报错。

开始练习 →

全都一样的输入

同一个 distinct,这次喂五个一模一样的词。

开始练习 →