LeetCode 455分发饼干 376摆动序列 53摆动序列 | 代码随想录25期训练营day31

贪心算法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;  
}

猜你喜欢

转载自blog.csdn.net/weixin_66706867/article/details/134596995