1005.K次取反后最大化的数组和
本题简单一些,估计大家不用想着贪心 ,用自己直觉也会有思路。
class Solution {
public:
static bool cmp(int a,int b){
return abs(a)>abs(b);
}
int largestSumAfterKNegations(vector<int>& nums, int k) {
sort(nums.begin(),nums.end(),cmp);
for (int i=0;i<nums.size();i++){
if (nums[i]<0 && k>0)nums[i]=-nums[i],k--;
}
if (k%2==1)nums[nums.size()-1]*=-1;
int sum=0;
for (int i=0;i<nums.size();i++)sum+=nums[i];
return sum;
}
};
总结
这道题写出来很好写,但是优化到最简感觉还是有难度的。
134. 加油站
本题有点难度,不太好想,推荐大家熟悉一下方法二
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int total=0;
int index=0;
int sum=0;
for (int i=0;i<gas.size();i++){
int val=gas[i]-cost[i];
sum+=val;
total+=val;
if (total<0){
total=0;
index=i+1;
}
}
if (sum<0)return -1;
return index;
}
};
135. 分发糖果
本题涉及到一个思想,就是想处理好一边再处理另一边,不要两边想着一起兼顾,后面还会有题目用到这个思路
class Solution {
public:
int candy(vector<int>& ratings) {
vector<int>temp(ratings.size(),1);
int mi=0;
int total=0;
for (int i=0;i<ratings.size()-1;i++){
if (ratings[i]<ratings[i+1])temp[i+1]=temp[i]+1;
}
for (int i=ratings.size()-1;i>0;i--){
if (ratings[i]<ratings[i-1])temp[i-1]=max(temp[i-1],temp[i]+1);
}
int res=0;
for (int num:temp)res+=num;
return res;
}
};