455. 分发饼干
题目链接:https://leetcode.cn/problems/assign-cookies/
算法思想:采用贪心算法实现。
将两个数组进行排序,为每个饼干找到一个合适的胃口,找到就+1。
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(), g.end()); //小孩子的胃口
sort(s.begin(), s.end());
int j = g.size()-1;
int result = 0;
for(int i = s.size()-1; i>=0;i--) //为每块饼干找打一个合适的胃口
{
while(j>=0&&s[i]<g[j])//如果饼干小于小孩子的胃口
{
j--;
}
if(j>=0) //说明找到了,result记录+1,j移动一个位置开始找
{
result++;
j--;
}
}
return result;
}
};
376. 摆动序列
算法思想:可以用坡来模拟这个过程。坡度有变化的地方,计数+1。
result初始值设置为1,计算前后的坡度差。第一个元素,前面没有值,可以将prediff设置为0进行计算。
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
//计算有多少个破
int result = 1;
int prediff = 0;
int curdiff = 0;
for(int i=0;i<nums.size()-1; i++)
{
curdiff = nums[i+1] - nums[i];
if(curdiff>0&&prediff<=0 || curdiff<0&&prediff>=0)
{
result++;
prediff = curdiff;
}
}
return result;
}
};
53. 最大子数组和
题目链接:https://leetcode.cn/problems/maximum-subarray/
算法思想:
sum记录当前的和,如果当前的和大于最大和,更新最大和。当当前的和小于0时,重新开始计数。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int maxsum = INT_MIN;
int sum = 0;
for(int i=0;i<nums.size();i++)
{
sum = sum+nums[i];
if(sum>maxsum)
maxsum = sum;
if(sum < 0)
sum = 0; //如果sum小于0了,那么抛弃它重新来
}
return maxsum;
}
};