我有两组有序Integer
s - SortedSet<Integer>
,称他们为set1
和set2
。我需要找到一个联合设置并返回子集偏移量10限制10.我的意思是什么?
Set1:
1,2,5,6,7,8,11,21,23,543,1002
Set2:
11,12,15,16,17,8,111,121,123,1543,11002
Union:
1,2,5,6,7,8,11,21,23,543,1002,12,15,16,17,111,121,123,1543,11002
Union offset 10 limit 10:
1002,12,15,16,17,111,121,123,1543,11002
请注意,联盟中8
和11
的基数为1
。
我正在寻找一种允许我不将整个集合加载到内存中的算法(因为这些集合可能非常大,我不会浪费服务器的资源)。有没有办法做到这一点?也许某些即时库(如commons
或guava
)可以提供帮助吗?
答案 0 :(得分:1)
算法非常简单。
Create empty hash Create empty array Set waste counter to 0 Iterate all sets (2 or more) Iterate set values If value not in hash Insert value into hash Increase waste counter If waste counter > offset (10) Insert value into array If array length == limit (10) Done - return array
答案 1 :(得分:0)
@Amit的回答很好,但如果偏移也很大,那么仍然可能会有一点内存效率低下。这是另一种方法,
Have a pointer on each set,
while offset > 0:
if setA pointer value < setB pointer value
increment setA pointer
decrement offset
else
increment setB pointer
add "limit" numbers starting from setA pointer to the output array.
if end of setA is reached before "limit" numbers are present,
add the remaining numbers from setB pointer to the output array.
注意:这仅适用于已排序的集合。
如果不清楚,请告诉我。