我一直在阅读Cracking the Coding Interview,对于一个特定的例子,我对作者给出的解释感到有些困惑。在书中,作者解释说我们有一个字符串数组(我编写的这些数组并没有出现在本书中):
<ul>
<li><a class="active" href="#home">Home</a></li>
<li><a href="#news">News</a></li>
<li><a href="#contact">Contact</a></li>
<li><a href="#about">About</a></li>
</ul>
此算法的第一项任务是对每个字符串进行排序,并保留:
["abc", "a", "dcglkjsl"];
然后对原始数组进行排序,如下所示:
["abc","a","cdgjklls"];
现在,作者继续逐个分析算法,得到O(a * s(log a + log s))的解决方案,其中a是数组的长度,s是长度最长的字符串。
为什么要对每个字符串的复杂度O(s log s)进行排序?我似乎无法绕过那个。作者说这是一个明显的结论,但我不明白为什么。我觉得如果我理解了这一重要信息,我就能理解作者是如何得出上述最终解决方案的。
答案 0 :(得分:0)
为什么要对每个字符串的复杂度O(s log s)进行排序?
如果您选择std:map
或balanced Binary Search Tree
来填充字符串的每个字符,则需要O(s log s)
来填充地图或BST。 log s
是树的深度。