题目link https://leetcode-cn.com/contest/weekly-contest-155/
1.水题 排序+暴力

class Solution {
    public List<List<Integer>> minimumAbsDifference(int[] arr) {
        Arrays.sort(arr);
        int min =Integer.MAX_VALUE;
        int n = arr.length;
        int [] abs = new int[n];
        for(int i = 0;i<n-1;i++) {
            int temp = arr[i+1]-arr[i];
            min = Math.min(temp,min);
            abs[i] = temp;
        }
        List<List<Integer>> linkedList = new LinkedList<>();
        for(int i =0 ;i< n;i++) {
            if (abs[i]==min) {
                List<Integer> list = new LinkedList<>();
                list.add(arr[i]);
                list.add(arr[i+1]);
                linkedList.add(list);
            }
        }
        return linkedList;
    }
}

2.
题意:给出第n个可以被a,b,c整除的数字
思路:容斥原理+二分
什么是容斥原理? 说白了就是在计算的时候先不考虑重叠的情况,先把所有的对象计算出来然后把重复计数的删除。那么回到我们这道题目,首先我们的数值的范围是1到2e9 ,因此使用二分法的话基本上在25此计算之内是可以得出结果的。那么我们下面就是需要判断这个数是不是我们想要的那个第n个可以被a,b,c整除的数字,这里就用到了我们的所说的容斥原理。

class Solution {
    public static long gcd(long x,long y) {  //辗转相除法
        return y ==0 ?x:gcd(y, x%y);
    }
    public static long lcm(long a,long b){  //最小公倍数=两数的乘积/最大公约(因)数, 
        return a*b/gcd(a,b);
    }
    private long comptue(long t, int a, int b, int c) {  //用容斥原理计算出一个数字t的丑数个数
        long ret = 0;
        ret += t / a;  //被a整除的数
        ret += t / b;  //被b整除的数
        ret += t / c;  //被c整除的数
        ret -= t / lcm(a, b);  //去除即可以被a整除也可以被b整除重复的数
        ret -= t / lcm(a, c);  //去除即可以被a整除也可以被c整除重复的数
        ret -= t / lcm(b, c);  //去除即可以被b整除也可以被c整除重复的数
        ret += t / lcm(lcm(a, b), c);  //在加被多减去的可以被a,b,c整除的数
        return ret;
    }
     public int nthUglyNumber(int n, int a, int b, int c) {
         long l = 0;
         long r = Integer.MAX_VALUE;
         long ac = gcd(a, c);
         long ab =gcd(a, b);
         long bc = gcd(b, c);
        while (l + 1 < r) {
            long m = (l + r) / 2;
            long cnt = comptue(m,a,b,c);  //通过计算m/最小公倍数就可以求出 
            if (cnt < n) {
                l = m;
            } else {
                r = m;
            }
        }
        return (int)r;
     }
}

3.并查集
思路:根据索引对,把可以交换的区域内按照从小到大排列
4.拓扑排序