力扣-1502-判断能否形成等差数列

华为技术面碰到一道力扣题,直接给出链接

下面给出两种方法

class Solution1502 {
    // 方法一:直接排序
    public boolean canMakeArithmetricProgression1(int[] arr) {
        if (arr.length == 1 || arr.length == 2) return true;

        Arrays.sort(arr);
        int deta = arr[1] - arr[0];

        for (int i = 1; i < arr.length; i++) {
            if (arr[i] - arr[i-1] != deta) return false;
        }

        return true;
    }

    // 方法二:hashMap
    // an = a1 + (len-1) * deta
    public boolean canMakeArithmetricProgression2(int[] arr) {
        if (arr.length == 1 || arr.length == 2) return true;
        int len = arr.length;
        int max = arr[0], min = arr[0];

        // 寻找最大值和最小值
        for (int i = 1; i < len; i++) {
            max = max < arr[i]? arr[i]: max;
            min = min > arr[i]? arr[i]: min;
        }

        // 寻找deta
        int deta = (max-min) / (len-1);

        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < len; i++) map.put(arr[i], i);

        for (int i = 0; i < len; i++) {
            int tmp = min + i * deta;
            if (!map.containsKey(tmp)) return false;
        }

        return true;
    }
}

 

posted @ 2021-08-10 20:42  Peterxiazhen  阅读(35)  评论(0编辑  收藏  举报