1502. 判断能否形成等差数列

思路

首先先用sort()进行排序,得到一个有序数组

  1. arr.sort((a,b) => a-b)

通过arr[0]-arr[1]得到公差保存,然后循环中比较arr[i]-arr[i+1]是否等于公差

  1. const diff = arr[0]-arr[1]
  2. for (let i = 0; i <arr.length ; i++) {
  3. if(arr[i+1] === undefined) break
  4. if(diff !== arr[i]-arr[i+1]) return false
  5. }
  6. return true

完整代码

  1. let fn1 = function (arr) {
  2. arr.sort((a,b) => a-b)
  3. const diff = arr[0]-arr[1]
  4. for (let i = 0; i <arr.length ; i++) {
  5. if(arr[i+1] === undefined) break //这句有优化空间
  6. if(diff !== arr[i]-arr[i+1]) return false
  7. }
  8. return true
  9. };

优化

看了前几位大佬的答案,在思路上没有差别,在语法上可以稍稍优化一下,改变i的初始值即可

  1. for (let i = 2; i <arr.length ; i++) {
  2. if(diff !== arr[i]-arr[i-1]) return false
  3. }

最终代码

  1. let fn2 = function (arr) {
  2. arr.sort((a,b) => a-b)
  3. const diff = arr[1]-arr[0]
  4. for (let i = 2; i <arr.length ; i++) {
  5. if(diff !== arr[i]-arr[i-1]) return false
  6. }
  7. return true
  8. };

解释

在速度上好像快了一丢丢,也省了一条语句