贪心算法1
LeetCode 455 分发饼干 2023.11.24
int findContentChildren(vector<int>& g, vector<int>& s) {
//先排序,这里默认升序
sort(g.begin(), g.end());
sort(s.begin(), s.end());
//存储结果
int result = 0;
//开始遍历,从大到小遍历每块大饼干与大的胃口
for(int i = g.size()-1, j = s.size()-1; i >= 0&&j >= 0;)
{
//如果当前饼干大小大于当前孩子的胃口,则结果++,饼干和孩子胃口进行下一次遍历
if(s[j] >= g[i])
{
result++;
i--;
j--;
}
//如果当前饼干大小小于当前孩子的胃口,那么饼干先不动,遍历下一个胃口更小的孩子胃口
else
i--;
}
//得出结果
return result;
}
LeetCode 376 摆动序列 2023.11.24
int wiggleMaxLength(vector<int>& nums) {
//用cur记录整个数组满足一大一小的数的个数
int cur = 1;
//用sym存储前两个数的差值
int sym = 0;
//开始遍历 从第二个数开始遍历
for (int i = 1; i < nums.size(); i++)
{
//第二个数只记录差值,只判断与第一个数不相同即可
if(sym == 0)
{
sym = nums[i] - nums[i-1];
if(sym != 0)
cur++;
continue;
}
//判断前两个差值是否与当前值与上一个数差值在0两侧
if(sym < 0 && nums[i] - nums[i-1] > 0)
{
cur++;
sym = nums[i] - nums[i-1];
}
//判断前两个差值是否与当前值与上一个数差值在0两侧
else if(sym > 0 && nums[i] - nums[i-1] < 0)
{
cur++;
sym = nums[i] - nums[i-1];
}
}
return cur;
}
LeetCode 53 摆动序列 2023.11.24
int maxSubArray(vector<int>& nums) {
//cur记录当前连续子数组和,当cur<0时,贼将cur归0,持续遍历
int cur = 0;
//result存储最终答案,连续子数组最大和
int result = INT_MIN;
//开始遍历
for (int i = 0; i < nums.size(); i++)
{
//求连续子数组的和
cur += nums[i];
//判断与result关系,若比result大,则更新最大值到result中
result = cur > result ? cur : result;
//如果连续子数组的和cur小于0,则归0后持续下一次遍历
if(cur < 0)
cur = 0;
}
return result;
}