1005. K 次取反后最大化的数组和 - 力扣(LeetCode)
class Solution {
static bool cmp(int a,int b){
return abs(a)>abs(b);
}
public:
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]*(-1);
k--;
}
}
if(k%2==1)
nums[nums.size()-1]*=-1;
int result=0;
for(int a:nums)
result+=a;
return result;
}
};
贪心算法,得这么加油才能跑完全程!LeetCode :134.加油站_哔哩哔哩_bilibili
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
int start=0;
int cursum=0;
int totalsum=0;
for(int i=0;i<gas.size();i++)
{
cursum+=gas[i]-cost[i];
totalsum+=gas[i]-cost[i];
if(cursum<0)
{
start=i+1;
cursum=0;
}
}
if(totalsum<0)
return -1;
else
return start;
}
};
贪心算法,两者兼顾很容易顾此失彼!LeetCode:135.分发糖果_哔哩哔哩_bilibili
class Solution {
public:
int candy(vector<int>& ratings) {
vector<int>tang(ratings.size(),1);
for(int i=1;i<ratings.size();i++)
{
if(ratings[i]>ratings[i-1])
tang[i]=tang[i-1]+1;
}
for(int i=ratings.size()-2;i>=0;i--)
{
if(ratings[i]>ratings[i+1])
tang[i]=max(tang[i+1]+1,tang[i]);
}
int candy=0;
for(int i=0;i<ratings.size();i++)
{
candy+=tang[i];
}
return candy;
}
};