题目描述:输入一个整型数组,数组中有正数也有负数,数组中一个或连续的多 个整数组成一个子数组,求连续子数组的最大和
思路:若和小于0,则将最大和置为当前值,否则计算最大和。
package Function;
//解法二:使用动态规划:
//F(i):以array[i]为末尾元素的子数组的和的最大值,子数组的元素的相对位置不变
//F(i)=max(F(i-1)+array[i] , array[i])
public class maxSubAray42 {
public int maxSubAray(int[] nums) {
if (nums == null||nums.length == 0) {
return 0;
}
int sum = 0;//包含array[i]的连续数组最大值
int result = nums[0];//记录当前所有子数组的和的最大值
for (int num : nums) {
//f(i-1)>0或者<=0
sum = sum > 0 ? sum + num : num;
result = Math.max(sum, result);
}
return result;
}
}