У меня есть быстрый вопрос о алгоритме максимальной подпоследовательности, который использует разделяй и властвуй, как показано ниже:
private static int maxSum3Recursive(int[] a, int left, int right)
{
if (left == right)
{
if (a[left] > 0)
{
return a[left];
}
else {
return 0;
}
}
int center = (left + right) / 2;
int maxLeftSum = maxSum3Recursive(a, left, center);
int maxRightSum = maxSum3Recursive(a, center + 1, right);
int maxLeftBorderSum = 0;
int leftBorderSum = 0;
for (int i = center; i >= left; i--)
{
leftBorderSum += a[i];
if (leftBorderSum > maxLeftBorderSum)
{
maxLeftBorderSum = leftBorderSum;
}
}
int maxRightBorderSum = 0;
int rightBorderSum = 0;
for (int i = center + 1; i <= right; i++)
{
rightBorderSum += a[i];
if (rightBorderSum > maxRightBorderSum)
{
maxRightBorderSum = rightBorderSum;
}
}
return Math.max(maxLeftSum, Math.max(maxRightSum, maxLeftBorderSum + maxRightBorderSum));
}
Алгоритм работает должным образом и дает мне максимальную сумму, однако у меня возникают проблемы с поиском начального и конечного индексов для границ для максимума. Например, допустим, у нас есть массив: {5, -5, 2, 9}. Сумма будет 2 + 9 = 11, а индекс будет [2 - 3], поскольку сумма должна быть последовательной. Другими словами, мы не можем просто использовать 5 и 9, чтобы получить 14, потому что они не рядом друг с другом.
Буду признателен за помощь в определении индексов.