做一个自动补全
补全 suggest:返回所有以 pre 开头的词,按字典序排好。 补全 app,把结果用 / 拼起来输出。
前缀有和没有,一次验两种
同一个 suggest。把两个结果的个数拼起来输出:补全 app(有三个)和补全 cat(一个都没有),中间用 / 隔开。 ⚠️ 光会返回空列表是不够的,有结果的那一半也得对。
⚠️ 词库大了之后差多少
Trie 查前缀的步数只和前缀长度有关;扫全表的步数和词库大小有关。 补全两个函数,算一个一百万词的词库上查 app 各要几步,用 / 拼起来输出。
选搜索算法先看什么
给一个查找需求选算法,先要问清楚的是【0】。
无序数组只查一次
一个没排序的数组,只需要查一次,最合适的是【0】。
两种找法的步数
在 [13, 15, 17, 23, 24] 里找 24。运行下面这段程序: def lsteps(a, target): n = 0 for x in a: n += 1 if x == t
第一步:线性查找
最终作品第一步:写出 lfind(找不到返回 -1)。 把两个结果拼起来输出:找 17、找 20,中间用 / 隔开。
第二步:二分查找
写出 bfind(闭区间 + while lo <= hi)。 把三个结果拼起来输出:找 24、找 13、找 20。
第三步:重复元素的左右边界
写出 left_bound 和 right_bound,在 [13, 15, 17, 17, 17, 23, 24] 里定位 17。 把 左边界/右边界/出现次数 拼起来输出。
第四步:前缀搜索
写出 Trie 的构建和 suggest,在 apple / app / apply / banana 里补全 app。 把结果按字典序用 / 拼起来输出。