我找不到與我正在處理的這個特定問題有關的問題。 所以問題是,要找到一個數組中具有最大和的連續子集,但子集的第一個整數應該大於它在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)時間。
在陣列陽性中的所有號碼? – AnotherGeek
他們不一定是積極的,因爲2 4 12 16 3 -19 5 17 18 24的輸出應該是35(4 12 16 3)。 –
也許你可以修改Kadane的算法來適應你的情況?只是在這裏猜測。 – Carlos