Question
在一个至少长度为3的等差数列数组找出中间缺少的值
比如:
find_miss([1,3,4]) // 2
find_miss([1,3,5,9,11]) // 7
Answer
一、计算差值
- 1、计算出等差数列的差值、最大值减去最小值除以数组长度+1
- 2、等差数列的每一位都会等于数列第一位加上当前位乘以差值
- 3、数列中差了一位,当得到第一个不符合规律的值时,减去差值即为缺少的值
let find_miss = (list) => {
let step = (list[length-1] - list[0]) / (list.length)
return list.filter((val,index)=>{
return val !== (list[0] + step * index)
})[0] - step
}
二、计算总值
- 1、计算出
包含缺少值
的等差数列的总和 - 2、计算出
不包含缺少值
的等差数列的总和 - 3、用全等差数列减去差等差数列,即为缺少值
let find_miss = (list) => {
let complete_sum = (list[0] + list[length-1]) * (list.length + 1) / 2
let imcomplete = list.reduce((a,b) => a+b)
return complete_sum - imcomplete_sum
}
自己的思路总是陷入死胡同,都是大牛们的解法,做个记录