数组类题目


有缺陷的传感器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

class Solution {
public:
    int badSensor(vector<int>& sensor1, vector<int>& sensor2) {
        if(sensor1==sensor2)return -1;//两个传感器数据完全一致,没有缺陷
        int i=0;
        while(sensor1[i]==sensor2[i]){
            ++i;
        }
        bool a=isTrue(sensor1,sensor2,i);
        bool b=isTrue(sensor2,sensor1,i);
        if(a&&b){
            return -1;
        }
        if(a){
            return 1;
        }
        return 2;
    }
    bool isTrue(vector<int>& sensor1, vector<int>& sensor2,int i){

        for(i=i+1;i<sensor2.size();++i){
            if(sensor2[i]!=sensor1[i-1])return false;
        }
        return true;
    }
};

在这里插入图片描述


增量元素之间的最大差值

在这里插入图片描述
在这里插入图片描述

解题思路:
维护当前的最小值 c u r M i n curMin curMin,当前元素小于当前最小值,就更新 c u r M i n curMin curMin
否则更新最大差值 m a x max max .

class Solution {
public:
    int maximumDifference(vector<int>& nums) {
        int max=-1;
        int curMin=nums[0];
        for(int i=1;i<nums.size();++i){
            if(nums[i]<=curMin)curMin=nums[i];
            else{
                max=std::max(max,nums[i]-curMin);
            }
        }
        return max;
    }
};

在这里插入图片描述


最小操作次数使数组元素相等

在这里插入图片描述

class Solution {
public:
    //思路:
    //假设最后相等的数是x,原数组最小值min,原数组和sum
    //x*n=(x-min)*(n-1)+sum  --->求出x=sum-min*(n-1)
    //最小操作次数m=x-min=sum-min*n;
    int minMoves(vector<int>& nums) {
        long long sum=0;
        int min=INT_MAX;
        for(int v:nums){
            sum+=v;
            min=std::min(v,min);
        }
        return sum-min*nums.size();
    }
};

在这里插入图片描述




范围求和 II

在这里插入图片描述
在这里插入图片描述

解题思路:

每次操作都是左上角区域从(0, 0)到(a, b)的矩形,必定重叠,所以找最小的a乘最小的b就行

class Solution {
public:
    int maxCount(int m, int n, vector<vector<int>>& ops) {
        if(ops.size()==0)return m*n;
        int minx=INT_MAX;
        int miny=INT_MAX;
        for(int i=0;i<ops.size();++i){
            minx=std::min(minx,ops[i][0]);
            miny=std::min(miny,ops[i][1]);
        }
        return minx*miny;
    }
};

在这里插入图片描述



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值