1005. K 次取反后最大化的数组和 - 力扣(Leetcode)
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]=-nums[nums.size()-1];
int result=0;
for(int i=0;i<nums.size();i++)
{
result+=nums[i];
}
return result;
}
};
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int cur=0;
int total=0;
int start=0;
for(int i=0;i<gas.size();i++)
{
cur+=gas[i]-cost[i];
total+=gas[i]-cost[i];
if(cur<0)
{
cur=0;
start=i+1;
}
}
if(total<0)
return -1;
return start;
}
};
第二轮从后向前需要想一下K
class Solution {
public:
int candy(vector<int>& ratings) {
vector<int>results(ratings.size(),1);
for(int i=0;i<results.size()-1;i++)
{
if(ratings[i+1]>ratings[i])
results[i+1]=results[i]+1;
}
for(int i=results.size()-2;i>=0;i--)
{
if(ratings[i+1]<ratings[i])
results[i]=max(results[i],results[i+1]+1);
}
int result=0;
for(int i=0;i<results.size();i++)
{
result+=results[i];
}
return result ;
}
};