Find Missing Term in Arithmetic Progression 等差数列缺失项

查找等差数列中的缺失项.

e.g.Input: arr[] = {2, 4, 8, 10, 12, 14}

Output: 6

Input: arr[] = {1, 6, 11, 16, 21, 31};

Output: 26.

采用binary search. 若是arr[mid] - arr[left] == (mid - left) * diff, 说明missing 部分在mid右侧.

否则missing部分在包括mid的左侧.

Time complexity: O(logn). Space: O(1).

 1 public class Main {
 2
 3     public static void main(String[] args) {
 4         try{
 5             int [] arr1 = {2, 4, 8, 10, 12, 14};
 6             int [] arr2 = {1, 6, 11, 16, 21, 31};
 7             int [] arr3 = {1, 6};
 8             System.out.println(findMissing(arr1));
 9             System.out.println(findMissing(arr2));
10
11             System.out.println(findMissing(arr3));
12
13         }catch(IllegalArgumentException e){
14             System.out.println(e.getMessage());
15         }
16     }
17
18     private static int findMissing(int [] arr) throws IllegalArgumentException{
19         if(arr == null || arr.length < 3){
20             throw new IllegalArgumentException("Invalid input!");
21         }
22         int len = arr.length;
23         int l = 0;
24         int r = len-1;
25         int diff = (arr[r] - arr[l])/len;
26         System.out.println(diff);
27         while(l <= r){
28             int mid = l+(r-l)/2;
29             if(arr[mid] - arr[l] == (mid-l)*diff){
30                 l = mid+1;
31             }else{
32                 r = mid;
33             }
34         }
35         return arr[r] - diff;
36     }
37 }

 

时间: 2024-12-10 16:06:39

Find Missing Term in Arithmetic Progression 等差数列缺失项的相关文章

【leetcode】1228.Missing Number In Arithmetic Progression

题目如下: 解题思路:题目很简单.先对数组排序,根据最大值和最小值即可求出公差,然后遍历数组,计算相邻元素的差,如果差不等于公差,即表示数字缺失. 代码如下: class Solution(object): def missingNumber(self, arr): """ :type arr: List[int] :rtype: int """ arr.sort() diff = (arr[-1] - arr[0])/(len(arr)) fo

HDOJ 5143 NPY and arithmetic progression DFS

DFS..... 多余3个的数可以自己成等比数列 和其他数组合成等比数列的有1,2,3,  2,3,4  1,2,3,4 三种情况 NPY and arithmetic progression Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 189    Accepted Submission(s): 61 Problem Descri

CF 1114 E. Arithmetic Progression

E. Arithmetic Progression 链接 题意: 交互题. 有一个等差序列,现已打乱顺序,最多询问60次来确定首项和公差.每次可以询问是否有严格大于x的数,和查看一个位置的数. 分析: 首先可以二分找到序列的最大值,然后考虑如何求公差. 随机选30个数,然后对任意两个求一遍gcd即可. 正确性证明 代码: #include<cstdio> #include<algorithm> #include<cstring> #include<iostream

(Java) LeetCode 413. Arithmetic Slices —— 等差数列划分

A sequence of number is called arithmetic if it consists of at least three elements and if the difference between any two consecutive elements is the same. For example, these are arithmetic sequence: 1, 3, 5, 7, 9 7, 7, 7, 7 3, -1, -5, -9 The followi

BestCoder22 1002.NPY and arithmetic progression(hdu 5143) 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5143 题目意思:给出 1, 2, 3, 4 的数量,分别为a1, a2, a3, a4,问是否在每个数只使用一次的前提下,分成若干部分,每部分数的长度 >= 3且满足是等差数列.可以的话输出 Yes ,否则 No . 比赛的时候过了pretest,那个开心啊--然后跟 XX 兽讨论了之后,才发现自己理解错了题目= = 要用到深搜,问组合嘛--组合就是有可能是(1, 2, 3, 4).(1, 2, 3

413 Arithmetic Slices 等差数列划分

如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列.例如,以下数列为等差数列:1, 3, 5, 7, 97, 7, 7, 73, -1, -5, -9以下数列不是等差数列.1, 1, 2, 5, 7数组 A 包含 N 个数,且索引从0开始.数组 A 的一个子数组划分为数组 (P, Q),P 与 Q 是整数且满足 0<=P<Q<N .如果满足以下条件,则称子数组(P, Q)为等差数组:元素 A[P], A[p + 1], ..., A[Q - 1], A[Q]

Leetcode-413 Arithmetic Slices(等差数列划分)

1 #define _for(i,a,b) for(int i = (a);i < (b);i ++) 2 class Solution 3 { 4 public: 5 int f(int len) 6 { 7 int sum = 0; 8 len -= 2; 9 _for(i,1,len+1) 10 sum += i; 11 return sum; 12 } 13 int numberOfArithmeticSlices(vector<int>& A) 14 { 15 int

如何处理DataFrame中缺失项

查看所有单元格是否为NaN DataFrame.isnull() 这个函数会返回一个和原来表格大小相同的表格,原表格值为NaN,此表中为True,否则为False pandas.notnull() 结果恰好是上一个表格的取反 DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)具体参数见(http://pandas.pydata.org/pandas-docs/stable/generated/p

[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