题目描述:
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array[−2,1,−3,4,−1,2,1,−5,4],
the contiguous subarray[4,−1,2,1]has the largest sum =6.
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
思路解析:https://www.cnblogs.com/springfor/p/3877058.html
求连续的数组值,相加的和最大和
试想一下,如果我们从头遍历这个数组。对于数组中的其中一个元素,它只有两个选择:
1. 要么加入之前的数组加和之中(跟别人一组)
2. 要么自己单立一个数组(自己单开一组)
所以对于这个元素应该如何选择,就看他能对哪个组的贡献大。如果跟别人一组,能让总加和变大,还是跟别人一组好了;如果自己起个头一组,自己的值比之前加和的值还要大,那么还是自己单开一组好了。
所以利用一个big数组,记录每一轮big的最大值,big[i]表示当前这个元素是跟之前数组加和一组还是自己单立一组好,然后维护一个全局最大值即为答案。
代码:
public class Solution {
public int maxSubArray(int[] A) {
int[] big =new int[A.length];//big数组记录遍历到当前i时最大的和。
int max = A[0];//记录所有的最大值
big[0]=A[0];
for(int i=1;i<A.length;i++){
big[i]=Math.max(A[i],big[i-1]+A[i]);
max = Math.max(max,big[i]);
}
return max;
}
}