分析:
这道题目使用动态规划来做。
我们设置两个变量,一个为result,用来存放最终结果,一个为sum,用来存放当前的和。
每次得到sum时,与result进行比较,取大的那个当作最终result值。
那么我们如何求sum呢?
在示例中,我们可以看到,nums数组中的数字有正有负。我们要找到连续数字的最大和,就必须要对nums数组进行遍历。
在遍历的时候,分两种情况:
- 如果此时的sum值大于0,就证明是可能有正的增益的,此时将nums[i]的值加上,对sum值进行更新;
- 如果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;
}
}