华为技术面碰到一道力扣题,直接给出链接。
下面给出两种方法
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; } }