首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最大和相邻子数组

最大和相邻子数组
EN

Stack Overflow用户
提问于 2019-09-23 05:14:56
回答 2查看 682关注 0票数 1

在一个数组中找到一个相邻的子数组,长度为N的A的和最大。

输入格式:

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

输出格式:

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

约束条件:

1 <= N <= 1e6 -1000 <= Ai <= 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。

你能告诉我为什么下面的代码不能工作吗?代码中的错误是什么?

代码语言:javascript
复制
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;
}



}
EN

回答 2

Stack Overflow用户

发布于 2022-02-06 15:26:12

假设有这样的情况

代码语言:javascript
复制
A = [-120, -202, -293, -60, -261, -67, 10]

所以在开始的时候

代码语言:javascript
复制
max = -120 
min = -120

现在,在第一个循环中,你的最大值不会改变,它将保持在-120,因为和总是小于-120。

而且你的第二个循环也不会运行,

al.get(i) = -120max = -120,则al.get(i) != max将为false。

票数 0
EN

Stack Overflow用户

发布于 2019-09-23 05:38:09

老实说,我不知道你到底想做什么,但不管怎样,在这里留下代码样本,这是使用动态编程方法解决这个问题的非常流行和简单的方法。这也称为Kadane's algorithm

代码语言:javascript
复制
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;
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58053443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档