题目描述
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例
代码
class Soluttion {
public int maxSubArray(int[] nums
) {
int ans
= nums
[0];
int sum
= 0;
for (int num
: nums
) {
if (sum
> 0) {
sum
+= num
;
} else {
sum
= num
;
}
ans
= Math
.max( ans
, sum
);
}
return ans
;
}
public static void main(String
[] args
) {
int[] nums
= {-2, 1, -3, 4, -1, 2, 1, -5, 4};
Soluttion gfh
= new Soluttion();
gfh
.maxSubArray(nums
);
}
}
代码说明:
这里使用的是动态规划的方法,要求的是一个连续的子序列的最大的和。首先我们执行的操作是对这个nums数组进行操作,代码中使用了两个变量,第一个变量sum,当sum大于0时,此时是有增益效果的,所以遍历的时候我们就是在sum的基础上加上num,如果sum小于零,则当前寻找的这个子序列,已经没有意义了, 重新将num的值赋值给sum,继续寻找新的最大和子序列。同时每一轮都要进行判断是否当前轮的sum大于之前赋值的ans,如果大于ans,就将此时的sum赋值给ans存储起来,如果小于ans就保持原来的ans的值保持不变,这里存在大于小于的原因是因为当前遍历的数可能是正的或负的,所以上面这种情况的判断。将所有的数组元素遍历结束后,就能找到最大的和的连续子序列。