參考question,我發現接受的答案使用Java Collections API來獲取索引。我的問題是有很多其他方法來解決給定的問題,這將是最佳的解決方案?算法複雜性:查找較大陣列中子陣列的起始索引
- 使用兩個循環
- 使用排序和二進制搜索
- 使用排序和合並
- 使用散列
- 使用集合API
參考question,我發現接受的答案使用Java Collections API來獲取索引。我的問題是有很多其他方法來解決給定的問題,這將是最佳的解決方案?算法複雜性:查找較大陣列中子陣列的起始索引
O(n^2)
時間O(nlog n)
時間O(nlog n)
時間O(k * n)
時間與其他一些開銷和額外的空間。O(n^2)
時間作爲其使用原生算法引擎蓋下你可以做到這一點的最佳方式與上述方式沿着線性O(n + m)
時間複雜度,其中n
和m
使用Knuth–Morris–Pratt algorithm兩個陣列的長度。
KMP算法基本上是一種對字符串起作用的模式匹配算法(查找haystack中針的起始位置)。但是你可以很容易地將它用於整數數組。
您可以對所有這些實現進行一些基準測試,並選擇哪一個足夠高效以滿足您的要求。
謝謝。但似乎給定的算法是用於字符串的。整數數組有用嗎? – deadbug
是的,它不會比較字符數組(字符串)'str1 [i] == str2 [j]'它會比較整數數組'arr1 [i] == arr2 [j]'。比較字符串的字符將比較一個字節和整數的四個字節。沒什麼不同。 –
試一試並基準它們?雖然我會說最少量的代碼通常是最好的。 – UnholySheep