我找不到与我正在处理的特定问题相关的问题。因此,问题是在一个数组中找到具有最大总和的连续子集,但子集的第一个整数应该比它的最后一个整数大,并且时间复杂度应为O(n)。
例如:2 4 12 16 3 19 5 20 18 24
输出应该是62,(19 5 20 18)。 到目前为止,我想出了这个算法:
private int biggestSum(int[] arr)
{
int startingIndex = 0;
int endingIndex = 1;
int sum_so_far = arr[0];
int sum_biggest = arr[0];
int count = 0;
for (int i = 1; i < arr.Length; i++)
{
sum_so_far += arr[i];
count++;
if (sum_so_far > sum_biggest)
{
startingIndex = i - count;
endingIndex = i;
sum_biggest = sum_so_far;
}
if (sum_so_far < 0)
{
sum_so_far = 0;
count = 0;
}
}
return sum_biggest;
}
我能够获得一个子集的最大总和以及子集的起始索引和结束索引,我该如何继续?还是说我应该采取不同的方法?
谢谢。
更新:由于有许多人观看了这个问题并没有解决它,我想知道是否有人可以证明这不可能在O(n)时间内完成,尽管问题明确提到解决方案应该在O(n)时间内完成。
O(n)
的解决方案,可以在开始位置之后找到一个起始位置。在这种情况下,它会减去中间的数字。 - btilly