你的问题可以在这里找到参考。
您必须使用Kadane的算法来解决这样的情况,其内容如下:
Initialize:
max_so_far = 0
max_ending_here = 0
Loop for each element of the array
(a) max_ending_here = max_ending_here + a[i]
(b) if(max_ending_here < 0)
max_ending_here = 0
(c) if(max_so_far < max_ending_here)
max_so_far = max_ending_here
return max_so_far
一个示例代码供您参考:
static int maxSubArraySum(int a[])
{
int size = a.length;
int max_so_far = Integer.MIN_VALUE, max_ending_here = 0;
for (int i = 0; i < size; i++)
{
max_ending_here = max_ending_here + a[i];
if (max_so_far < max_ending_here)
max_so_far = max_ending_here;
if (max_ending_here < 0)
max_ending_here = 0;
}
return max_so_far;
}
我试图在一个数组中找到具有最大和的邻接子数组。所以,对于数组 {5,15,-30,10,-5,40,10}
给定一个数组,编写一个程序以在大小的所有子数组中找到最大 gcd 我的代码: 它是O(N^2),还能再优化吗?
很抱歉发了这么长的帖子,但我不明白我做错了什么。感谢您事先的帮助! 这里是当前面提到的列表作为输入给出时的输出,我已经经历并查看了每一个步骤,列表中的每一个消除在我看来都是合乎逻辑的,我不知道一个人怎么会以结束和105结束。如果有人能帮我理解,我会非常感激的!
给出了一个由N个整数组成的数组。 数组的最大和是该数组的非空连续子数组的元素的最大和。 例如,数组[1,-2,3,-2,5]的最大和是6,因为子数组[3,-2,5]的和是6,并且不可能实现更大的子数组和。 现在,您只能从给定数组中删除一个以上的元素。这样做可以得到的结果数组的最大可能最大和是多少? 我正在用我自己的测试用例测试我的代码。我在Dev-C++上得到了正确的输出。但是当我在网上测试我的代
例如-如果给定数组是:-int[]arr={1,4,8,3}; 结果Subarray应该是: 并且,每个子阵列的最大值为:-1,4,8,8,4,8,8,3,因此所有最大值之和应为:-1 4 8 8 4 8 8 8 8=3=60 要编写Subarray,我可以使用循环来做到这一点:- 在此之后,我试图在字典数据结构中存储最大值,但无法找到确切使用字典结构的位置以及如何使用Math.max语句。
我在读“算法导论”。在最大子数组问题(第4章)中,作者提出不能仅仅通过求子数组的最大值和最小值来计算股票买卖的最大利润。作者通过计算所有可能的买进和卖出日期的组合来谈到替代方案,例如蛮力,这将需要0(n^2)个时间。另一种选择是寻找价格日变化数组的最大子数组。 然而,我编写了一个算法,它将花费0(n)个时间,并找到最大利润。这是在0(n)对0(nlogn)的最大子数组问题。但我知道作者不会错的。我