在长度为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;
}
}
老实说,我不知道您到底想做什么,但无论如何,这里的代码示例是非常流行和简单的,使用动态编程方法解决这个问题。这也被称为卡丹算法
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()函数,我不知何故错过了这个函数
最大乘积子数组给定一个数组包含正整数和负整数,求最大乘积的子数组。例子: 但不能破题找到子数组。