最大和子串

来源:互联网 发布:手机淘宝怎么看好友 编辑:程序博客网 时间:2024/05/19 17:04

题目:给定一个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;    }}


0 0