leetcode 53 最大子数组和

在这里插入图片描述
原题链接

  1. 贪心的思想
  2. 若当sum为正值,则将其和num相加,然后判断其与ans的值的大小
  3. 若sum为负值,则直接将sum置为num,统计当前num和ans的大小
  4. 贪心:当sum为负数则一定会拉低 ans的总和,因此只要出现了负数,就跳过,直接将num(也就是数组中的当前值赋给sum)
  5. 二刷:贪心的思想,若sum为负,则一定会拉低ans的总和,因此只要出现了负数就跳过,直接将当前的元素给sum,然后再去 执行ans = Math.min(ans, sum) 选择当前的ans,因此 与ans 比较的sum,肯定是比之前ans 大的值,或者就是一个num
  6. 对于sum += num 操作 ,不是在判断语句之前进行的,而是在判断语句内进行的,先判断当前sum的大小,然后决定是 sum += num 还是 sum = num
 class Solution {
    public int maxSubArray(int[] nums) {
        //ans保存首位置之和,sum是最小值
        int ans = nums[0];
        int sum = Integer.MIN_VALUE;
        for(int num : nums){
            //如果sum大于0,则将新值加到sum上,若sum本来就是小于0的,则将num的值给sum
            if(sum > 0){
                sum +=num;
            }else{
                sum = num;
            }
            ans = Math.max(sum,ans);
        }
        return ans;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值