方法一 排序
var canMakeArithmeticProgression = function(arr) {
arr.sort((a,b)=>a-b)
let diff = arr[1]-arr[0]
for(let i=1;i<arr.length;i++){
if(arr[i]-arr[i-1]===diff) continue
else return false
}
return true
};
消耗时间和内存情况:
方法二 数学方法
找出arr里的最大值和最小值,如果最大值等于最小值说明arr里的元素都是相同的diff=0,return true。max!= min,那么用(max-min)/ arr.length-1 可以得出等差数列的差diff
遍历arr里的没一个元素num,对于任意num,它与min的差应该是diff的倍数,并且不能出现相同的倍数,用Set集合保存倍数值,如果出现相同的倍数则return false
var canMakeArithmeticProgression = function(arr) {
let min=Math.min(...arr)
let max=Math.max(...arr)
if(min===max) return true
if((max-min)%(arr.length-1)!=0) return false
let diff=(max-min)/(arr.length-1)
let set = new Set()
for(let num of arr){
if((num-min)%diff!=0) return false
let mult=(num-min)/diff
if(set.has(mult)) return false
else set.add(mult)
}
return true
};
消耗时间和内存情况: