力扣-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; } }
作者:Ryanjie
出处:http://www.cnblogs.com/ryanjan/
本文版权归作者和博客园所有,欢迎转载。转载请在留言板处留言给我,且在文章标明原文链接,谢谢!
如果您觉得本篇博文对您有所收获,觉得我还算用心,请点击右下角的 [推荐],谢谢!