题目
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
实现思路
-
首先观察,想要返回连续的最大和,首先应该知道取的第一个数应该是正数开始,然后每加上后面的一个数时,如果加上后和小于0,然后重新去获取这之后的第一个正数
-
上面的逻辑是在数组内有正数的前提下,那如果没有正数呢?我们应该每次比较一下当前数和之前记录的数的大小然后去重新赋值最大值。
-
当然,如果不考虑时间复杂度,不去考虑性能,那么最简单应该都是想到3重循环去做,对于数组内每一个元素,都让它从它的下一个开始到数组尾 ,依次去计算其中的和,比较出最大值即可
代码
class Solution {
public int maxSubArray(int[] nums) {
int res = nums[0];
int sum = 0;
for (int num : nums) {
if (sum > 0)
sum += num;
else
sum = num;
res = Math.max(res, sum);
}
return res;
}
}
不懂就问