[英]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.