【发布时间】:2015-12-13 11:38:27
【问题描述】:
我知道有一种简单的 N 阶算法,我确信这是唯一可以使用的算法。还有其他的吗:
- 渐近更好
- 可流水线化,即 RAW、WAR 友好
- 多线程。
我确定 (1) 有一个,但我不太确定 (2) 和 (3)。如果您还想提及为什么这是一个很好的面试问题。我也很想知道。
【问题讨论】:
-
如果您使用二叉搜索树来存储单个字符,其中节点的排序/顺序基于字符的索引,那么您可以渐近到
O(log k)。但是常数因素会很多,很多更糟(由于指针遍历和树的一般缓存不友好)。 -
“如果您还想提及为什么这是一个很好的面试问题。我也很想知道这一点。” --> 因为最好的面试问题确实如此没有明确的答案,但正如你所拥有的那样,吸引你去探索替代方案。
-
要退回什么?问题是要求返回第 k 个字符,还是删除第 k 个字符的字符串?
-
字符串是否表示为字符数组?我认为面试官可能想被问到这样的问题,以开始讨论表示字符串/字符串集的其他方式。
-
查看渐近复杂性问题的一种相对简单的方法是,无论您如何进行删除的细节,除了
k - 1之外的所有字符都必须移动到新位置。那是o(N - (k - 1))=o(N)(小o),所以上限不能比这更好。由于您确实可以在O(N)操作中完成这项工作,因此这是您最好的上限。
标签: c string algorithm assembly