1
我在我的一次採訪中得到了這個問題。有一個與開始值和結束值相關的對象數組。與每個對象關聯的計數是其他對象的數量,具有更多的開始時間和更短的結束時間。所以我必須找到與每個對象相關的計數。訪談 - 基於起始和結束值的排序
我想出了爲O(n^2)解決方案,其中第一我整理的初始值,然後檢查與下一個對象的最終值每個對象的最終值來獲得計數。有沒有更好的算法來解決這個問題。
我在我的一次採訪中得到了這個問題。有一個與開始值和結束值相關的對象數組。與每個對象關聯的計數是其他對象的數量,具有更多的開始時間和更短的結束時間。所以我必須找到與每個對象相關的計數。訪談 - 基於起始和結束值的排序
我想出了爲O(n^2)解決方案,其中第一我整理的初始值,然後檢查與下一個對象的最終值每個對象的最終值來獲得計數。有沒有更好的算法來解決這個問題。
我沒有找到一個簡單的方法來解決它,也許有點複雜。
我想出了一個解決方案O(nlogn)
。像你的解決方案,首先我排序起始值,但在降順序。然後申請一個新的數組a[]
保持出現次數的結束值(即,當遇到一個對象(開始,結束),使a[end]
加1)。然後遍歷對象陣列,用於對象i
與(start, end)
,我們只需要添加總和(A [1] | 0 < = I < =端)到最終的答案,然後用a[end] ++
更新陣列a
,對於sum()
查詢,我們可以使用Fenwick tree或Segment tree來計算O(logn)
中的每個查詢,因此總複雜度爲O(nlogn)
。
我想,如果你有對你做了什麼代碼,你可以要求在代碼審查SE這個問題的審查你的代碼,或者找到更好的辦法。即使程序員SE也可能有所幫助。 – Vini
@ViniVasundharan CodeReview是用於審查代碼,而不是算法的想法。 –
@ n.m。 :哦。我認爲這將有助於最佳的編程實踐。 – Vini