精华内容
下载资源
问答
  • 判断一个无序数列是否等差数列

    千次阅读 2017-03-03 10:55:59
    我的想法是只是判断一个数组是否为等差数列,相对来说容易好多。思路如下:  (1)对数组进行第一次遍历,找出数组中的min.max  (2)如果是等差数列,那么公差必然是(max-min)/(n-1) n元素个数  (3)有了...

      这个题目是腾讯电话面试的考题之一:给定一个数组,不适用任何排序方法,快排什么的,判断出一个数列是否是等差数列,并且要求算法复杂度不得超过快排。

    我的想法是只是判断一个数组是否为等差数列,相对来说容易好多。思路如下:

      (1)对数组进行第一次遍历,找出数组中的min.max

      (2)如果是等差数列,那么公差必然是(max-min)/(n-1)   n为元素个数

      (3)有了公差,有了首项,有了尾项。这个等差数列实际上就模拟出来了。接下来就是判断是不是符合要求

      最后出来的程序,只是对数组做了两次遍历。时间复杂度为线性的,比快排(nlogn)少好多,尤其n相当大时。如果大家有其他的想法,可以交流一下,共同进步。同时,如果有什么不对的地方,批评指正。

    package perceptron;
    
    import java.io.IOException;
    import java.util.TreeMap;
    
    public class arithmetic {
    	public static void main(String[] args) throws IOException{
    		
    		double[] seq = {2,4,6,10};
    		judgeSeq(seq);
    	}
    	
    	public static void judgeSeq(double[] seq){
    		
    		double min = Double.MAX_VALUE;
    		double max = Double.MIN_VALUE;
    		for(int i=0;i<seq.length;i++){//对数组进行第一次遍历,找出数组中min ,max
    			if(seq[i]<min){
    				min = seq[i];
    			}
    			else if(seq[i]>max){
    				max = seq[i];
    			}
    		}
    
    		double Dif = (max-min)/(seq.length-1); //求得公差
    		
    		
    		
    		String flag = "True";
    		if(Dif==0){ //如果公差为0,那么说明数列中所有的数都是相同的 ,判断所有数是否相同
    			for(int i=0;i<seq.length;i++){
    				if(seq[i]!=min){
    					flag = "false";
    					break;
    				}
    			}
    			
    		}
    		else{//公差不为0
    			
    			TreeMap<Double,Integer> tm = new TreeMap<Double,Integer>();//建立容器,存储每个数字出现的次数
    			
    			for(int i=0;i<seq.length;i++){ 
    				
    				//统计每个谁出现的次数,因为公差不为0,必然不可能出现相同的数字
    				if(tm.get(seq[i])==null){
    					tm.put(seq[i], 0);
    				}
    				tm.put(seq[i],tm.get(seq[i])+1);
    				if(tm.get(seq[i])>1){
    					flag = "false";
    					break;
    				}
    				
    				
    				double DifNum = (seq[i]-min)/Dif; // 判断(seq[i]-min)/Dif是否为整数,在[0,seq.length-1]之间
    				int s = (int)DifNum;
    				if(DifNum-(double)s!=0||DifNum>seq.length||DifNum<0){
    					flag = "false";
    					break;
    				}
    			
    			}
    			
    		}
    		
    		if(flag.equals("True")){
    			System.out.println("属于等差数列");
    		}
    		else{
    			System.out.println("不属于等差数列");
    		}
    	}
    
    }
    

    展开全文
  • 判断一个数列不是等差数列,要比判断一个数列是等差数列比较容易。bool progressive = true; for (int i = 0; i () - 1; ++i){ if (A[i+1] - A[i] != A[1] - A[0]) progressive = false; }

    判断一个数列不是等差数列,要比判断一个数列是等差数列比较容易。

    bool progressive = true;
    for (int i = 0; i < A.size() - 1; ++i){
        if (A[i+1] - A[i] != A[1] - A[0]){
            progressive = false;
            break;
        }
    }

    当然也可以等差数列的性质:

    bool progressive = true;
    int d = A[1] - A[0]
    for (int i = 2; i < A.size(); ++i){
        if (A[i] != A[i-1] + d) {
            progressive = false;
            break;  
        }
    
    }
    展开全文
  • 4068:判断是否可以构成等差数列 总时间限制: 1000ms 内存限制: 65536kB 描述 有一组未排序整数,判断这组数字是否可以构成等差数列。如4 8 6这几个数字可以构成一个4 6 8的等差数列。 输入 第一行是一个正整数N(1<...

    4068:判断是否可以构成等差数列
    总时间限制: 1000ms 内存限制: 65536kB
    描述
    有一组未排序整数,判断这组数字是否可以构成等差数列。如4 8 6这几个数字可以构成一个4 6 8的等差数列。

    输入
    第一行是一个正整数N(1<=N<=100),表示下面需要检测的数组的个数。其后有N行,每行有若干个数字,米格数字间由空格隔开。
    输出
    有N行,每行对应输入的一个数组,如果该数组可以构成等差数列,则该行输出True,否则输出False。
    样例输入
    2
    4 8 6
    3 3 2
    样例输出
    True
    False

    问题链接Bailian4068 判断是否可以构成等差数列
    问题简述:(略)
    问题分析
        这个题的关键是不知道每行有多少个数。
        使用C++的字符串流来处理比较方便,使用容器vector可以解决数据数量未知的问题。
    程序说明:(略)
    参考链接:(略)
    题记:(略)

    AC的C++语言程序如下:

    /* Bailian4068 判断是否可以构成等差数列 */
    
    #include <iostream>
    #include <algorithm>
    #include <sstream>
    #include <vector>
    
    using namespace std;
    
    int main()
    {
        int n;
    
        cin >> n;
        cin.get();
    
        while(n--) {
            string s;
            vector<int> v;
            int a;
            getline(cin, s);
            stringstream ss(s);
            while(ss >> a)
                v.push_back(a);
    
            sort(v.begin(), v.end());
    
            bool flag = true;
            int d;
            if(v.size() >= 2) d = v[1] - v[0];
            for(int i = 2; i < (int)v.size(); i++)
                if(v[i] - v[i - 1] != d) {
                    flag = false;
                    break;
                }
    
            cout << (flag ? "True" : "False") << endl;
        }
    
        return 0;
    }
    
    展开全文
  • 判断等差数列

    2020-08-16 18:20:10
    判断等差数列 题目: 如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。 如果可以重新排列数组形成等差数列,请返回 true ;否则,返回 false 。 代码:` import java.util.Arrays...

    判断等差数列

    题目:

    如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。
    如果可以重新排列数组形成等差数列,请返回 true ;否则,返回 false 。

    代码:`

    import java.util.Arrays;
    
    class Solution1 {
        public boolean canMakeArithmeticProgression(int[] arr) {
            //首先给数组排序
        	Arrays.sort(arr);
        	//循环遍历数组
            for (int i=1;i<arr.length-1;++i){
            	//判断前后两项之和是否等于中间项的两倍
                if(2*arr[i]!=arr[i-1]+arr[i+1]){
                    return false;
                }
            }
            return true;
        }
    }
    public class ariPro {
       public static void main(String[] args) {
    	   Solution1 s=new Solution1();
    	   //准备两个测试数据
    	   int arr1[]= {3,2,1};
    	   int arr2[]= {1,2,4};
    	   //调用函数输出结果
    	   System.out.println("arr1是否是等差数列:"+s.canMakeArithmeticProgression(arr1));
    	   System.out.println("arr2是否是等差数列:"+s.canMakeArithmeticProgression(arr2));
       }
      
    }
    
    
    

    输出结果:`

    在这里插入图片描述

    展开全文
  • 项目中遇到一个当数字1,3,5,7,9,,,,,,,,,,的时候,执行...所以直接判断这个数字(num % 2 == 1)就可以写对应要执行的函数了 if (num % 2 == 1){//说明当前num(2n+1)的数 //在里面写对应要执行的函数即可 } ...
  • 题目描述 如果一个数列S满足对于所有的合法的i,都有S[i + 1] = S[i] + d, 这里的d也可以...但是有些数列通过交换还是不能变成等差数列,小易需要判别一个数列是否能通过交换操作变成等差数列 输入描述: 输入包括两行...
  • 建模-判断一列数是不是等差数列

    千次阅读 2017-08-16 17:28:20
    题目: 如果一个数列S满足对于所有的合法的i,都有S[i + 1] = S[i] + d, 这里的d也可以是...但是有些数列通过交换还是不能变成等差数列,小易需要判别一个数列是否能通过交换操作变成等差数列。输入要求: 输入包括两
  • 等差数列

    2019-05-31 08:50:03
    2019年5月30日等差数列前言思路代码 等差数列 题目:如果一个数列S满足对于所有的合法的i,都有S[i + 1] = S[i] + d, 这里的d也可以是...但是有些数列通过交换还是不能变成等差数列,小易需要判别一个数列是否能通...
  • leetcode刷题37——判断能否形成等差数列2020.11.21题目思路解法 题目 给你一个数字数组 arr 。 如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。 如果可以重新排列数组形成等差...
  • Java判断一组数字是否等差数列 公式: 1.先排序 2.当前数=第一个数+相邻两数的差【公差】*当前位置 eg: 1,3,5 每个数字之间相差2,假如当前数是5,则与前面相差两个2, 因为如果是等差数列的话,那么后面相邻的两...
  • 题目: ...解释:对数组重新排序得到 [1,3,5] 或者 [5,3,1] ,任意相邻两项的差分别 2 或 -2 ,可以形成等差数列。 示例 2: 输入:arr = [1,2,4] 输出:false 解释:无法通过重新排序得到等差数列
  • 解释:对数组重新排序得到 [1,3,5] 或者 [5,3,1] ,任意相邻两项的差分别 2 或 -2 ,可以形成等差数列。 示例 2: 输入:arr = [1,2,4] 输出:false 解释:无法通过重新排序得到等差数列。 提示: 2 &
  • 如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。 如果可以重新排列数组形成等差数列,请返回 true ;否则,返回 false 。 代码实现: class Solution { public boolean ...
  • 1502. 判断能否形成等差数列 https://leetcode-cn.com/problems/can-make-arithmetic-progression-from-sequence/ 难度简单 给你一个数字数组arr。 如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个...
  • OpenJudge百练第4068号习题:判断是否可以构成等差数列题目描述解题思路参考答案测试用例小结 题目描述 来源 OpenJudge网站 – 百练习题集-第4068号习题 要求 总时间限制: 1000ms 内存限制: 65536kB 描述 有一组未...
  • 判断能否形成等差数列。具体描述:给你一个数字数组arr。如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为等差数列。如果可以重新排列数组形成等差数列,请返回true;否则,返回false。  ...
  • 一,判断能否形成等差数列1,问题简述给你一个数字数组 arr 。如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。如果可以重新排列数组形成等差数列,请返回...
  • leetcode1502. 判断能否形成等差数列(小学生难度)

    千次阅读 多人点赞 2021-03-08 15:46:35
    解释:对数组重新排序得到 [1,3,5] 或者 [5,3,1] ,任意相邻两项的差分别 2 或 -2 ,可以形成等差数列。 示例 2: 输入:arr = [1,2,4] 输出:false 解释:无法通过重新排序得到等差数列。 提示..
  • 解释:对数组重新排序得到 [1,3,5] 或者 [5,3,1] ,任意相邻两项的差分别 2 或 -2 ,可以形成等差数列。 示例 2: 输入:arr = [1,2,4] 输出:false 解释:无法通过重新排序得到等差数列。 提示: 2 &
  • python判断等差数列

    千次阅读 2019-09-26 05:28:02
    import sys n = int(sys.stdin.readline().strip()) s = sys.stdin.readline() s = list(map(int, s.split(' '))) print(n) print(s) ...for i in range(len(s)-1): ... for j in range(i+1, len(s))...
  • 1502.判断能否形成等差数列 给你一个数字数组arr 。 如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为等差数列 。 如果可以重新排列数组形成等差数列,请返回true ;否则,返回false 。 示例1...
  • 等差数列末项计算题目内容:给出一个等差数列的前两项a1,a2,求第n项是多少可以使用以下语句实现非负整数n的输入:n=int(input())输入格式:三行,包含三个整数a1,a2,n输出格式:一个整数,即第n项的值输入样例:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,598
精华内容 5,839
关键字:

判断数列是否为等差数列