假设我有TreeSet<Integer>
:
1 3 4 6 8 9 10
我希望顶部 - k
“最接近”的元素与输入数字x
相符。
例如,我希望得到k=3
和x=5
:
4 6 3
有没有办法做到这一点?
答案 0 :(得分:4)
您需要做的是获得一个headSet,所有元素都小于目标元素,tailSet代表更大的元素。现在算法有点类似于合并排序的合并阶段。
c_desc
和c_asc
x
。取此值并推进迭代器k
元素答案 1 :(得分:2)
“最接近x”我假设你的意思是 let filtered = array.filter {
$0 >= 5 && $0 <= 10
}
的最低值。
即,对于x = 5,k = 3:
abs(n - x)
如果是这样,我会:
1,3,4,6,8,9,10 -> 3,4,6
3,4,5,10,11,12 -> 3,4,5
0,1,2,5,6,7,8 -> 5,6,7
映射到Integer
Pair<Integer,Integer>
所以一个值是n -> new Pair(n, abs(n - x))
,另一个值是n
的距离。 x
,(ab)使用Pair
,(ab)使用Map.Entry
或在库中找到一个)Integer[2]
列表进行排序
Pair<>
元素。使用Java 8流:
k