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/leetcode-1228-missing-number-in-arithmetic-progression-解题思路分析/
此条目发表在leetcode分类目录,贴了, , 标签。将固定链接加入收藏夹。

发表评论

您的电子邮箱地址不会被公开。