leetcode53——最大子序和——java实现

本文介绍了一种使用动态规划求解最大子数组和的方法。通过设置两个变量,result用于存放最终结果,sum用于存放当前的和,遍历数组,根据sum的正负值决定是否累加,最终得到最大子数组和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分析:
这道题目使用动态规划来做。
我们设置两个变量,一个为result,用来存放最终结果,一个为sum,用来存放当前的和。
每次得到sum时,与result进行比较,取大的那个当作最终result值。

那么我们如何求sum呢?
在示例中,我们可以看到,nums数组中的数字有正有负。我们要找到连续数字的最大和,就必须要对nums数组进行遍历。
在遍历的时候,分两种情况:

  1. 如果此时的sum值大于0,就证明是可能有正的增益的,此时将nums[i]的值加上,对sum值进行更新;
  2. 如果sum值小于0,反正sum都小于0了,就算nums[i]是一个正数,加起来也肯定不是最大和,所以此时sum的也要进行更新,其值就等于现在的nums[i]。

具体代码如下:

class Solution {
    public int maxSubArray(int[] nums) {
        int result = nums[0];
        int sum = 0;
        for(int i = 0; i < nums.length; i++) {
            if(sum > 0) {
                sum += nums[i];
            } else {
                sum = nums[i];
            }
            result = Math.max(result, sum);
        }
        return result;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值