簡體   English   中英

用於查找范圍重疊的內存效率更高的算法

[英]More memory efficient algorithm for finding overlap in ranges

問題中,答案包括一種算法,用於查找給定范圍上的范圍列表的重疊。 但是在我的情況下,我有一個由n整數組成的列表,將它們分組為n^2對時會形成范圍。 例如,如果我們從整數數組中獲取array[i]array[j] ,則(array[i]-array[j],array[i]+array[j])構成一個范圍。 但是為了實現建議的算法,解決方案是O(n^2)存儲復雜度。 是否可以進一步優化(在內存方面)?

例子:我有一個更大的范圍(l,r) ,我必須找出(l,r)中至少有一個范圍列表中有多少個整數,例如,給定的整數數組是{1,2,3} 因此所有可能的范圍是(2-1,1+2), (3-1,1+3), (3-2,3+2) 假設(l,r)(2,7) 然后,由於(2,5)至少存在於其中4中,因此答案為。

首先對數組進行排序(如果尚未排序)。 然后注意,唯一值得考慮的范圍是j == i-1

要了解為什么考慮以下數組:

{2,3,5,8}

那么可能的范圍是:

i=3 j=2 ==> (8-5,8+5) = (3,13)
i=3 j=1 ==> (8-3,8+3) = (5,11)
i=3 j=0 ==> (8-2,8+2) = (6,10)

i=2 j=1 ==> (5-3,5+3) = (2,8)
i=2 j=0 ==> (5-2,5+2) = (3,7)

i=1 j=0 ==> (3-2,3+2) = (1,5)

請注意, j < i-1的范圍始終是j == i-1的范圍的嚴格子集,因此不需要考慮這些范圍。 因此,您只需要考慮O(n)范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM