leetcode-easy-53 Maximum Subarray

最大子序列

先来看看原题:

大概意思就是给一个数组,求出最大连续子序列,并返回他们的值!

目前算法思想比较低级,所及刚开始看这道题的时候在想着用两个for循环去遍历,一个for控制子序列的大小,一个for控制子序列的位置移动,但是想了半天不得其解,看了看大神的代码,终于领悟,以下是我的领悟,经供参考:

 

先贴出成功代码:

class Solution {
	public int maxSubArray(int[] nums) {
        int max = nums[0];
        int res = nums[0];
        for(int i = 1; i < nums.length; i ++){
            max = Math.max(nums[i] , max + nums[i]);
            res = Math.max(res , max);
        }
        return res;
    }
}

 可以看到,设置了两个int变量,max和res!

max是用来存储子序列最大数之和的,而res,则是用来保存最大数之和,在后面的序列中没有比res大的序列和之时,就可以返回res了

 

再来介绍一下Math.max();

顾名思义,就是用来求参数最大值的,参数可以放两个,在这里放的是nums[i]和(max+nums[i])

res一眼就可以看懂,保留最大max,

 

设置nums[i]和(max+nums[i])的原因如下:

比较二者大小,初始从nums[0]开始比较

然后在for循环一次向下的时候,逐渐比较二者大小,当后者大于前者时,说明子序列之和大,当前者大于后者时,说明连续子序列之和在这里断开了,所以max不在记录后者,转而开始记录nums[i],然后重新开始与子序列之和比较大小,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值