有缺陷的传感器
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;
}
};