题目大意:
等差数列中缺失的数字
数组 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.
本网站文章均为原创内容,并可随意转载,但请标明本文链接如有任何疑问可在文章底部留言。为了防止恶意评论,本博客现已开启留言审核功能。但是博主会在后台第一时间看到您的留言,并会在第一时间对您的留言进行回复!欢迎交流!
本文链接: http://leetcode.jp/leetcode-1228-missing-number-in-arithmetic-progression-解题思路分析/