1005.K次取反后最大化的数组和
题目链接:1005.K次取反后最大化的数组和
文档链接:1005.K次取反后最大化的数组和
视频链接:贪心算法,这不就是常识?还能叫贪心?LeetCode:1005.K次取反后最大化的数组和
C++实现
class Solution {
private:
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(k>0 && nums[i] < 0){
nums[i] = -nums[i];
k--;
}
}
if(k > 0 && k%2==1) nums[nums.size() - 1] *= -1;
int result = 0;
for(int i = 0; i< nums.size(); i++){
result += nums[i];
}
return result;
}
};
134. 加油站
题目链接:134. 加油站
文档链接:134. 加油站
视频链接:贪心算法,得这么加油才能跑完全程!LeetCode :134.加油站
C++实现
class Solution {
public:
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
vector<int> remain(gas.size(), 0);
int cursum = 0;
int totalsum = 0;
int index = 0;
for(int i = 0; i < remain.size(); i++){
remain[i] = gas[i] - cost[i];
cursum += remain[i];
totalsum += remain[i];
if(cursum < 0){
cursum = 0;
index = i+1;
}
}
if(totalsum < 0) return -1;
return index;
}
};
135. 分发糖果
题目链接:添加链接描述
文档链接:添加链接描述
视频链接:贪心算法,两者兼顾很容易顾此失彼!LeetCode:135.分发糖果
C++实现
class Solution {
public:
int candy(vector<int>& ratings) {
vector<int> candynum(ratings.size(), 1);
for(int i = 1; i < ratings.size(); i++){
if(ratings[i] > ratings[i - 1]){
candynum[i] = candynum[i - 1] + 1;
}
}
for(int i = ratings.size() - 2; i >= 0; i--){
if(ratings[i] > ratings[i + 1]){
if(candynum[i + 1] + 1 > candynum[i]){
candynum[i] = candynum[i + 1] + 1;
}
}
}
int sum = 0;
for(int i = 0; i<candynum.size(); i++){
sum += candynum[i];
}
return sum;
}
};