最大子序列
先来看看原题:
大概意思就是给一个数组,求出最大连续子序列,并返回他们的值!
目前算法思想比较低级,所及刚开始看这道题的时候在想着用两个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],然后重新开始与子序列之和比较大小,