LEETCODE 1228. Missing Number In Arithmetic Progression 解题思路分析

题目大意:

等差数列中缺失的数字

数组 arr 中的值符合等差数列的数值规律:在 0 <= i < arr.length – 1 的前提下,arr[i+1] – arr[i] 的值都相等。

然后,我们从数组中删去一个 既不是第一个也不是最后一个的值。

给你一个缺失值的数组,请你帮忙找出那个被删去的数字。

示例 1:

输入:

arr = [5,7,11,13]
输出:

9
解释:

原来的数组是 [5,7,9,11,13]。

示例 2:

输入:

arr = [15,13,12]
输出:

14
解释:

原来的数组是 [15,14,13,12]。

提示:

  • 3 <= arr.length <= 1000
  • 0 <= arr[i] <= 10^5

如果想查看本题目是哪家公司的面试题,请参考以下免费链接: https://leetcode.jp/problemdetail.php?id=1228

解题思路分析:

既然原始数组是等差数列,那么我们要先求出这个等差是多少,方法很简单,用最大数减去最小数,再除以数组的元素个数即可。计算出等差值之后,循环整个数组,看哪两位之间的差不是等差值,那么前一位加上等差或者后一位减去等差即是答案。

实现代码:

public int missingNumber(int[] arr) {
    // 计算等差值
    int diff=(arr[arr.length-1]-arr[0])/arr.length;
    // 从index为1开始循环
    for(int i=1;i<arr.length;i++){
        // 比较当前位与前一位的差值是否等于等差值
        if(arr[i]-arr[i-1] != diff){
            // 如果不等,前一位加上等差值即是结果
            return arr[i-1] + diff;
        }
    }
    return 0;
}

本题解法执行时间为0ms。

Runtime: 0 ms, faster than 100.00% of Java online submissions for Missing Number In Arithmetic Progression.

Memory Usage: 38.7 MB, less than 100.00% of Java online submissions for Missing Number In Arithmetic Progression.

本文转载自 https://leetcode.jp/