最大和连续子数组

时间:2019-09-22 21:14:55

标签: java arraylist contiguous

找到长度为N且总和最大的数组A中的连续子数组。

输入格式:

第一个也是唯一一个参数包含一个整数数组A。

输出格式:

返回一个整数,该整数表示连续子数组的最大可能和。

约束:

1 <= N <= 1e6 -1000 <= A [i] <= 1000

例如:

输入1:     A = [1、2、3、4,-10]

输出1:     10

说明1:     子数组[1、2、3、4]的最大和为10。

输入2:     A = [-2,1,-3,4,-1,2,1,-5,4]

输出2:     6

说明2:     子数组[4,-1,2,1]的最大和为6。

能否请您告诉我以下代码为何不起作用以及代码中的错误是什么?

public class Solution {

public int maxSubArray(final List<Integer> A) {

    ArrayList<Integer> al = new ArrayList<Integer>();
    int sum = 0;
    int max = A.get(0);
    int min = A.get(0);
    for(int i = 0;i < A.size();i++){

        sum += A.get(i);
        al.add(sum);
        if(sum > max) max = sum;

    }

    //to find the min till the index of max
    for(int i = 0; al.get(i) != max;i++) {
        if(al.get(i) < min) min = al.get(i);
    }



    if(min < 0)return max-min;
    else return max;
}



}

1 个答案:

答案 0 :(得分:-1)

老实说,我没有完全了解您要执行的操作,但是无论如何,这里留下的代码示例对于使用动态编程方法来解决此问题而言非常流行且简单。也称为Kadane's algorithm

public static int name(List<Integer> numbers) {

    int maxSum = numbers.get(0);
    int tempMax = maxSum;

    for (int i = 1; i < numbers.size(); i++) {
        tempMax = Math.max(numbers.get(i), numbers.get(i) + tempMax);
        maxSum = Math.max(maxSum, tempMax);
    }

    return maxSum;
}