代码随想录算法训练营 Day 31 | 455.分发饼干,376.摆动序列,53.最大子序和

理论基础

讲解链接:代码随想录-贪心算法理论基础

455.分发饼干

讲解链接:代码随想录-455.分发饼干 

对胃口和饼干排序,然后遍历饼干,如果饼干大于等于胃口,就+1,否则饼干向后递增再判断。

public int findContentChildren(int[] g, int[] s) {
    Arrays.sort(g);
    Arrays.sort(s);
    int count = 0;
    for (int i = 0; i < s.length && count < g.length; i++) {
        if (s[i] >= g[count]) {
            count++;
        }
    }
    return count;
}

376.摆动序列

讲解链接:代码随想录-376.摆动序列

需要注意几个点,下标从1开始,所以结果初始化为1,然后更新前一个差值,要放在条件中,不能每次都更新。出现平坡就会有问题的。

 

public int wiggleMaxLength(int[] nums) {
    int result = 1;
    int curDiff = 0;
    int preDiff = 0;
    for (int i = 1; i < nums.length; i++) {
        curDiff = nums[i] - nums[i - 1];
        if ((curDiff > 0 && preDiff <= 0) || (curDiff < 0 && preDiff >= 0)) {
            result++;
            preDiff = curDiff;
        }
    }
    return result;
}

53.最大子序和

讲解链接: 代码随想录-53.最大子序和 

这里有个思路,就是如果如果前结果和小于0,就直接归0,抛弃前面的结果。大于0就保留下来,因为对于后面肯定是有益的。

public int maxSubArray(int[] nums) {
    int result = Integer.MIN_VALUE;
    int sum = 0;
    for (int i = 0; i < nums.length; i++) {
        if (sum < 0) {
            sum = 0;
        }
        sum += nums[i];
        result = Math.max(sum, result);
    }
    return result;
}

总结

这题目不看一遍题解真做不出来。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值