腾讯笔试题-邻值查找

腾讯笔试题-邻值查找

考察TreeSetsort 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));	

    }
}
原文地址:https://www.cnblogs.com/lixyuan/p/12918704.html