我有一個排序的非重疊區間(從零開始,半開)的列表,例如,用於遍歷非重疊區間的算法
{[0, 5), [10, 20), [35, 40)}
比方說,我有(這種情況下說,3
)的區間中的一個點和+10
的步長值(即向右移動10位)。有沒有一種算法可以在O(1)時間內計算我的最終位置? (編輯:也許我應該說,東西爲O更好(N))與上述區間步+10
未採用區間覆蓋被認爲是不存在的位置,所以位置3
將導致19
最終位置( +1
將我的位置移動到4
,則剩餘的+9
從位置10
開始直到位置19
)。另一個例子是,如果我們將15
作爲開始位置,並且步驟值爲-10
,那麼我們將擁有0
的最終位置。
爲了簡單起見,我們還可以假設最終位置總是以一個間隔結束。然而,我們可能會或可能不知道從哪個時間間隔開始計數。
我當然可以迭代O(n)時間間隔列表(n
=間隔數)。但我覺得應該有更好的方法來解決這個問題。
P.S.這個問題有一個名字嗎?這感覺應該有一個適當的名字,但我不確定它是什麼。
難道你不能只使用預處理步驟把所有的值放入一個數組,然後在O(1)中獲取它們嗎?如果您多次執行此操作(至少Omega(n)次),那麼平均成本爲O(1)... – gdelab
通過將間隔排列到二叉樹中(非葉),可以輕鬆獲得對數時間節點應該公開其子樹的最小覆蓋區間和實際的寬度總和)。我不知道如何去持續時間。 – Useless
@Useless您是否介意在更詳細的答案中轉換您的評論?我對這些具體細節感興趣,顯然這是一個正確的渠道。 – Codor