【发布时间】:2012-12-26 13:33:43
【问题描述】:
我有以下代码:
public List<String> function(String pre) {
List<String> temp = new ArrayList<>();
for(String str : list) {
if(str.startsWith(pre)
temp.add(str);
if(str.charAt(0) > pre.charAt(0))
break;
}
return temp;
}
该函数应返回以给定前缀开头的所有单词。
代码中的list是一个排序的ArrayList。此代码具有O(n) 复杂性。
我该如何改进它?
例如在log(n) 时间运行。
【问题讨论】:
-
如果您交换数据结构,请查看前缀搜索尝试。
-
不可能在列表中的字符串数量上比 O(n) 更好地运行,因为您可以让所有字符串(或其中大部分)以相同的前缀开头。只有多次进行多次搜索才能获得性能提升。
-
这里曾经有一个答案指出,由于列表已排序,您可以使用 O(log n) 二进制搜索和调用 List.subList 找到匹配范围的开头和结尾() 在 O(1) 时间内提取范围,无论找到多少单词。它似乎由于某种原因被删除了——我不知道为什么,因为它对我来说似乎是正确的。
-
这是在现已删除的答案中链接到的问题 - stackoverflow.com/questions/2218931/…
标签: java