⚠️ 用 `lo < hi` 会怎样

下面这段二分把循环条件写成了 lo < hi,在 [13, 15, 17, 23, 24] 里找 24。运行它: def buggy(a, target): lo = 0 hi = len(a) - 1 whi

开始练习 →

改成 `lo <= hi` 呢

同一段代码,只把循环条件改成 lo <= hi。运行它: def bfind(a, target): lo = 0 hi = len(a) - 1 while lo <= hi: mid

开始练习 →

⚠️ 修一个漏查的二分

下面这段二分用了 while lo < hi,会漏掉最后一格。 把它改对,然后找 24。

开始练习 →

⚠️ 修一个会转不出来的二分

下面这段二分忘了更新边界,范围永远不缩小。 模板里放了一个 guard 步数上限,不改的话它会返回 -2(而不是把判题机挂住)。 把两句边界更新补上,然后找 24。

开始练习 →

三个边界一起验

写一个正确的二分,然后一次验三条:找 24(最后一格)得 4、找 13(第一格)得 0、找 20(不存在)得 -1。 三条全过输出 边界通过,否则输出 有失败。

开始练习 →

前缀搜索用 Trie 比扫全表强在哪

做"以某个前缀开头"的搜索,Trie 比扫一遍全表强在【0】。

开始练习 →

有序数组二分能不能做前缀搜索

把词库排好序再二分,做前缀搜索【0】。

开始练习 →

以 app 开头的有几个

词库是 apple、app、apply、banana。运行下面这段程序: def build_trie(words): t = {} for w in words: node = t for

开始练习 →

app 自己算不算一个词

同一个词库。运行下面这段程序: def build_trie(words): t = {} for w in words: node = t for ch in w:

开始练习 →

数出以某个前缀开头的词有几个

补全 count_prefix:先走到前缀那个节点,再递归数出下面有多少个词尾标记。 这次数 app 开头的。

开始练习 →