Find the miss term in an Arithmethc Arogression


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
}

自己的思路总是陷入死胡同,都是大牛们的解法,做个记录

你可能感兴趣的:(Find the miss term in an Arithmethc Arogression)