我有以下代碼開頭:字符串以給定前綴
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;
}
函數應該返回與給定前綴開頭的所有單詞。
列表中的代碼是一個有序的ArrayList。此代碼具有O(n)
複雜性。
我該如何改進?
例如運行在log(n)
時間。
如果您交換數據結構,請查看前綴搜索嘗試。 –
因爲你可以讓所有的字符串(或其中的大多數)以相同的前綴開始,所以它不可能比列表中的字符串數量中的O(n)更好地運行。如果必須多次執行多次搜索,則只能獲得性能提升。 –
以前有過答案,注意,由於列表已排序,所以可以找到匹配範圍的開始和結尾,其中O( log n)二進制搜索和調用List.subList()來提取O(1)時間的範圍,而不管找到多少個單詞。由於某種原因它似乎已被刪除 - 我不知道爲什麼,因爲它對我來說似乎是正確的。 –