给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
package likou;
/*
* 最大子序列和
*/
public class Demo53 {
public static void main(String args[]) {
Demo53 demo = new Demo53();
int[] nums = {-2,1,-3,4,-1,2,1,-5,4};
System.out.println(demo.maxSubArray(nums));
}
/*先定义要给初始max值为nums[0]
* 解题思路就是从数组的第一个元素开始算,假设最大和为sum
* 步骤1.当计算到第i位时,则需要比较sum+nums[i]和nums[i]大小
* 如果nums[i]比较大,则从nums[i]从新算
* 比较之后还要步骤1中的结果和前面循环保存的max的值的大小,谁大返回谁
*/
public int maxSubArray(int[] nums) {
int max = nums[0];
int sum = 0;
for(int i=0;i<nums.length;i++) {
int temp = nums[i];
sum = (sum+nums[i])>nums[i]?sum+nums[i]:nums[i];
if(max < sum) {
max = sum;
}
}
return max;
}
}