首页 > 其他分享 >leetcode1502-判断能否形成等差数列

leetcode1502-判断能否形成等差数列

时间:2022-09-02 19:44:52浏览次数:63  
标签:arr maxNum int num minNum 能否 leetcode1502 等差数列 size

 

 我的原始代码

class Solution { public:     bool canMakeArithmeticProgression(vector<int>& arr) {         sort(arr.begin(),arr.end());         int sizes=arr.size(),n=arr[1]-arr[0];         for(int i=2;i<sizes;i++)         {             if(arr[i]-arr[i-1]!=n)  return false;         }         return true;     } };   不使用排序的方法
class Solution {
public:
    bool canMakeArithmeticProgression(vector<int>& arr) {
       int minNum = INT_MAX, maxNum = INT_MIN;
       unordered_map<int, int> map;
       int diff;
       for(int num : arr){
           map[num]++;
           minNum = min(minNum, num);
           maxNum = max(maxNum, num);
       }
       if(maxNum == minNum)
            return true;
       if((maxNum - minNum) % (arr.size() - 1))  //这里是剪枝,如果不是等差数列,size-1次变化后的总变化量与变化次数取余一定不为0
            return false;
        else
            diff = (maxNum - minNum) / (arr.size() - 1);  //这里初步认定公差,但不确定是否为真
        for(int i = minNum; i <= maxNum; i+=diff){
            if(map.find(i) == map.end())    //如果从最小值逐渐加公差找不到i,则说明不是等差数列
                return false;
        }
       return true;
    }
};
剪枝指的是在深度优先搜索中去掉一些不符合题目要求的或是浪费时间而没有作用的答案,从而使得深度优先搜索能够更快得到正确答案。因为在搜索树中去掉答案形似剪掉树的枝叶,所以这一方法被称为剪枝。

标签:arr,maxNum,int,num,minNum,能否,leetcode1502,等差数列,size
From: https://www.cnblogs.com/uacs2024/p/16651031.html

相关文章

  • NC21303 删括号 问删除括号对,能否将s转变成 t 线性DP 栈
     链接:https://ac.nowcoder.com/acm/problem/21303来源:牛客网题目描述给你一个合法的括号序列s1,每次你可以删除一个"()"你可以删除0个或者多个......
  • 判断一个数能否整除数的方法
    一个数被整除的判断方法:被2整除:若一个整数个位上是偶数,则这个数能被2整除。被3整除若一个整数的数字之和能被3整除,则这个数能被3整除。被4整除:若一个整......
  • MySQL九:MVCC能否解决幻读问题
    转载~幻读【前后多次读取,数据总量不一致】同一个事务里面连续执行两次同样的sql语句,可能导致不同结果的问题,第二次sql语句可能会返回之前不存在的行。事务A执行多次读......