当前位置: 首页 > 知识库问答 >
问题:

最大和邻接子阵

丌官绍元
2023-03-14

在长度为N的数组中求和最大的邻接子数组。

输入格式:

输出格式

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

制约因素:

输入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个答案

长孙阳泽
2023-03-14

老实说,我不知道您到底想做什么,但无论如何,这里的代码示例是非常流行和简单的,使用动态编程方法解决这个问题。这也被称为卡丹算法

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;
}
 类似资料:
  • 所以,我刚刚进行了一次在线编程评估,给了我两个问题,其中一个是这个连续的子数组和提供了两个复杂的编码问题+8个MCQ,并将在1小时内完成。 这里我将讨论上面提到的子数组的最大邻接和之一。通常,我发现困难的部分是处理负数和连续。我所做的是首先将应用到给定的数组,然后再次按照负值的绝对值排序,就像i的例如,对于给定的随机数组,我在每个i和所有j迭代后都有一个max,如果max 。

  • 我知道如何不用分而治之来解决这个问题,但我不知道用分而治之的方法。 感谢帮助!

  • 例如:如果数组是[9,8,7,6,5,4,3,1,2,2],它应该返回46(长度为7的子数组[9,8,7,6,5,4,3]和长度为2的子数组[2,2]之和)。不能组合[9,8,7,6,5,4,3]和[1,2,2],因为这将产生长度为10的非素数的连续子数组(幂等性)。 有谁能解释一下如何使用DP来解决这类问题吗?多谢了。

  • null 我的代码使用一个递归函数和一个helper print()函数来查找这些数字中最大的一个 编辑:发布print()函数,我不知何故错过了这个函数

  • 最大乘积子数组给定一个数组包含正整数和负整数,求最大乘积的子数组。例子: 但不能破题找到子数组。