Я не мог найти вопрос, связанный с этой конкретной проблемой, с которой я имею дело. Таким образом, проблема заключается в том, чтобы найти непрерывное подмножество в массиве с наибольшей суммой, но первое целое число подмножества должно быть больше его последнего целого числа в 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) времени.