【算法/贪心算法/简单题】题解+详细备注(共3题)
455.分发饼干
class Solution {
public:
// 贪心
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(),g.end());
sort(s.begin(),s.end());
int result{};
int nG = g.size()-1;
int nS = s.size()-1;
while(nG >=0 && nS >= 0){
if(s[nS] >= g[nG]){
nG--;
nS--;
result++;
}else{
nG--;
}
}
return result;
}
};
1005.K次取反后最大化的数组和
class Solution {
public:
int largestSumAfterKNegations(vector<int>& nums, int k) {
// 根据绝对值进行排序
sort(nums.begin(),nums.end(),[&](auto&&a,auto&&b){
return abs(a) < abs(b);
});
// 从后向前遍历,遇到负值就取反
for(int i = nums.size()-1;i>=0;--i){
if(k == 0) break;
if(nums[i] < 0){
nums[i] = -nums[i];
k--;
}
}
// 如果k依然未使用完,就只对绝对值最小的数进行频繁取反
while(k > 0){
nums[0]*=-1;
k--;
}
// 返回答案
return accumulate(nums.begin(),nums.end(),0);
}
};
860.柠檬水找零
class Solution {
public:
bool lemonadeChange(vector<int>& bills) {
int fiveCount{};
int tenCount{};
// 简单贪心,依次判断即可
for(int i{};i<bills.size();++i){
if(bills[i] == 5){
fiveCount++;
}else if(bills[i] == 10){
if(fiveCount == 0) return false;
tenCount++;
fiveCount--;
}else{
if(fiveCount >= 1 && tenCount >= 1){
fiveCount--;
tenCount--;
continue;
}
if(tenCount == 0 && fiveCount >= 3){
fiveCount-=3;
continue;
}
return false;
}
}
return true;
}
};