回答
一種選擇是將數組按升序排序來預處理數組。一旦完成了這些操作,就可以通過在已排序的數組上進行兩次二元搜索來查找屬於某個時間間隔的所有元素 - 一個用於查找第一個大於或等於間隔開始的元素,另一個用於查找最後一個元素不大於間隔的終點 - 然後迭代整個數組以輸出該範圍內的所有元素。
這需要O(n log n)時間來進行預處理,如果您使用標準排序算法(如quicksort或heapsort),但可以在O(n log U)時間內完成,如果使用基數排序(這裏U是範圍中最大的整數)。查詢然後每個都需要O(log n + k)時間,其中n是元素的數量,k是該範圍內元素的數量。
如果你想變得很花哨,你可以通過使用van Emde Boas tree這個專門用於存儲整數的數據結構以指數形式加速。如果你正在使用的最大整數值是U,那麼你就可以建立時間爲O結構(N日誌記錄U),然後執行端點範圍搜索時間爲O(log日誌U)。然後您可以在時間O(log log U)中查找範圍內的所有元素,從而給出一個O(k log log U)算法來查找範圍內的所有匹配。
希望這會有所幫助!
排序數組,然後做二進制搜索找到比發車間隔較大的數組中的第一個元素的索引,然後再次找到小於間隔結束的第一個元素,並返回所有中間的整數。對於每個查找,將是O(log N)
,其中N是整數的數量。
這與我的回答不完全相同嗎? :-) – templatetypedef 2013-02-16 18:26:16
是的,你打我,儘管我寫了更少:( – 2013-02-16 18:27:13
這就是爲什麼它永遠不會是一種罪行_even more_解釋,@HariShankar :-) – Richard 2014-10-03 05:04:38
關於索引根據其元素的數組是什麼?
for (i in original_array) indexed_array[original_array[i]] = original_array[i]
for (j in stream) {
for (k=stream[j][0]; k<=stream[j][1]; k++)
if (indexed_array[k]) return indexed_array[k]
}
或將索引,而不是整數:
for (i in original_array) indexed_array[original_array[i]] = i
答案取決於你的需求:
你有多少時間間隔寫成M?
當然,使用M * O(N logN)是矯枉過正的,特別是當M很大時,間隔也是如此。
的另一種方法:使用O(N)的額外空間。
prefix[i] = number of numbers in range 0 to i
可以在O(N)時間完成。
現在,你需要O(1)時間對於每個查詢:
query[l,r] = prefix[r] - prefix[l - 1] + 1
所以總的時間複雜度爲O(N logN + M)
你的答案總是返回1的任何查詢! – 2014-02-13 09:42:16
@PhamTrung謝謝,有錯誤,更正。 – 2014-02-13 12:00:00
- 1. 查找間隔給予元組
- 2. 如何查找數組中給定元素的所有索引?
- 3. 分組列表中的元素的給定的時間間隔
- 4. 查找出現在所有給定的數組中的元素
- 5. 查找數組的中間元素
- 6. SQL查詢在給定的時間間隔內分割數字
- 7. 查找特定區間內的素數
- 8. 查找給定索引以外的數組中的元素
- 9. 查找與給定總和相等的數組元素
- 10. 查找C中數組中給定類型的元素#
- 11. 查找給定數組中的兩個重複元素
- 12. 查找給定數組中的2個重複元素
- 13. 如何用Mongoose查找數組元素?
- 14. 如何找出給定元素存在的組的大小?
- 15. 爲定義的時間間隔拾取numpy數組的元素
- 16. 如何查找給定範圍內的所有素數?
- 17. 查找數組之間的公共元素(匹配元素)
- 18. 在O(log n)時間內查找數組中的重複元素時間
- 19. 如何檢查時間(分鐘/秒)是否在給定的時間間隔內?
- 20. 如何檢查時間是否在給定的時間間隔範圍內
- 21. MongoDB:按數組元素查找元素
- 22. 如何在嵌套列表中查找給定的元素?
- 23. 如何在組件中查找元素?
- 24. 如何查找給定時間範圍內的所有數據
- 25. 如何在一組DOM元素中找到具有給定ID的元素?
- 26. 給定一個區間,找到所有的間隔在間隔
- 27. 查找給定元素後的實例
- 28. 如何確定給定範圍內的最佳間隔數?
- 29. 顯示數組元素間隔爲1
- 30. 查找特定元素的數組與重複元素
我會親自去的東西,如桶排序。製作n個桶,其中n是間隔數。然後在O(n)你會得到你的結果。 – 2013-02-16 18:24:52