题目:给定一个int数组,求出该数组的最大子串的和
如int数组[−2,1,−3,4,−1,2,1,−5,4]
,最大子串为[4,−1,2,1]
,最大和为6
思路:
1、动态规划,遍历数组,设置3个变量,max_sum当前最大和,curr_sum当前和,一旦curr_sum<0,即放弃之前的子串,重新开始计算,curr_sum每加一次就比较下当前最大,直到遍历结束
public class Solution {
public int maxSubArray(int[] A) {
if (A.length==0)
return 0;
if (A.length==1)
return A[0];
int count = 0;
int max = Integer.MIN_VALUE;
for (int i=0;i<A.length;i++){
if (A[i]<0)
count++;
if (A[i]>max)
max = A[i];
}
if (count==A.length)
return max;
int sum = Integer.MIN_VALUE,curr_sum = 0;
for (int i=0;i<A.length;i++){
if ((curr_sum += A[i])<0){
curr_sum = 0;
}
sum = curr_sum>sum?curr_sum:sum;
}
return sum;
}
}