题目:
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。
穷举 时间复杂度O(n)
public static int maxSubArray(int[] nums) {
//结果
int result = Integer.MIN_VALUE;
//data为子序和 l为索引
for (int data =0, l = 0; l < nums.length; l++) {
//nums数组的数据可能都为负数,也可能只有一个正数。所以必须计算max,并保存
result = Math.max(result, nums[l]);
//子序和 < (当前的子序和)
if(data<(data+=nums[l])){
//计算max
result = Math.max(result, data);
}
//如果 当前子序和 <0 那就放弃这一段数据。计入下一次计算只会让数据变小
//只要 当前子序和 >0 就继续计入下一次计算
if(data < 0){
data = 0;
}
}
return result;
}
代码很简单,如果使用两层for循环写,可能是把问题想复杂了。这里就不做过多的讲解了
分治法还不会 !!!!晚点研究下