zoukankan      html  css  js  c++  java
  • [leetcode 双周赛 11] 1228 等差数列中缺失的数字

    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
    2. 使用为2的窗口扫描整个数组, 选出前后两元素差值不等于之前整体差值的前一个元素
    3. 输出前一个元素+差值

    代码实现

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

    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
    ", cur, next, cur+sub);
                // 如何前后元素差值不为等差, 那么前一个元素+等差 就是缺失的元素
                if (cur+sub != next) {
                    return cur+sub;
                }
            }
    
            return 0;
        }
    }
    
    
  • 相关阅读:
    redis 学习笔记
    导数据方法
    数据库常用操作
    zepto.js
    shopnc
    vue.js
    laravel
    mysql进阶学习
    Python基础------生成器表达式形式、面向过程编程、内置函数部分
    Python基础----生成器、三元表达式、列表生成式、生成器表达式
  • 原文地址:https://www.cnblogs.com/slowbirdoflsh/p/11736159.html
Copyright © 2011-2022 走看看