腾讯笔试题-邻值查找
考察TreeSet
(sort item
)的使用,set.lower(e)
和 set.higher(e)
返回set
中小于e
的中最大的数和大于e
的中最小的数,如果不存在返回null
。
static void solution(int[] a, int n) {
TreeSet<Integer> set = new TreeSet<>();
Map<Integer, Integer> map = new HashMap<>();
set.add(a[0]); map.put(a[0], 0);
for(int i=1; i < n; i++) {
int idx = -1;
if(set.lower(a[i]) != null) {
int t = set.lower(a[i]);
idx = map.get(t);
}
if(set.higher(a[i]) != null) {
int t = set.higher(a[i]);
if(idx == -1) idx = map.get(t);
else {
int x = Math.abs(t-a[i]);
int y = Math.abs(a[idx]-a[i]);
if(x == y)
idx = (a[idx] <= t ? idx : map.get(t));
else if(x < y)
idx = map.get(t);
}
}
map.put(a[i], i);
set.add(a[i]);
System.out.println(Math.abs(a[idx]-a[i]) + " "+ (map.get(a[idx])+1));
}
}