ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[leetcode 双周赛 11] 1228 等差数列中缺失的数字

2019-10-25 09:04:26  阅读:369  来源: 互联网

标签:11 arr cur int 元素 双周 len 数组 leetcode


1228 Missing Number In Arithmetic Progression 等差数列中缺失的数字

问题描述

有一个数组, 其中的值符合等差数列的数值规律, 也就是说:

  • 在 0 <= i < arr.length - 1 的前提下, arr[i+1] - arr[i] 的值都相等.

我们会从该数组中删除一个 既不是第一个不是最后一个的值, 得到一个新的数组  arr.

给你这个缺值的数组 arr, 请你帮忙找出被删除的那个数.

示例 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

思路

  • 读题
    输入数组, 是个等差序列, 不过中间(除了首尾)缺了一个元素

    暴力枚举

    1. 通过首尾元素算出该等差序列的差值, (tail-first)/len
    1. 使用为2的窗口扫描整个数组, 选出前后两元素差值不等于之前整体差值的前一个元素
    1. 输出前一个元素+差值

代码实现

暴力法 使用窗口遍历整个数组

class Solution {
    public int missingNumber(int[] arr) {
        int len = arr.length;
        // first, last 首尾两元素
        int first = arr[0], last = arr[len-1];
        // 该等差序列的整体等差
        int sub = (last-first) / len;

        for (int i = 0; i < len-1; i++) {
            // 一个为2的窗口 [i, i+1]
            int cur = arr[i], next = arr[i+1];
            // System.out.printf("cur:%d next:%d n1:%d\n", cur, next, cur+sub);
            // 如何前后元素差值不为等差, 那么前一个元素+等差 就是缺失的元素
            if (cur+sub != next) {
                return cur+sub;
            }
        }

        return 0;
    }
}

标签:11,arr,cur,int,元素,双周,len,数组,leetcode
来源: https://www.cnblogs.com/slowbirdoflsh/p/11736159.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有