Задачка 01

otvertka07

Имеется линейный массив целых чисел.
Найти непрерывный интервал, содержащий максимальную сумму.
За один проход.

artimon

Ты забыл дать другие граничные условия.

Fragaria

границы отрезков находятся из условия, что соседние с границами числа - отрицательные.
Пихаешь в переменные левую и правую границу первого отрезка, потом ищещь следующий отрезок, если у него сумма больше - то заменяешь границы на новые.

otvertka07

бред

Fragaria

уже понял
может быть ситуация х х х х 100 50 60 -1 100 200 х х х
и тогда отрезок с присутствующей внутри -1 всё равно имеет сумму больше, чем отдельно 100 50 60 или 100 200
тогда хз

Helga87

Имеется ввиду за один проход массива?
Если да, то можно так:
int max = 0;
bool assigned = false;
int maxStart = 0;
int maxEnd = 0;
int [] b = new int[a.Length];

for (int i = 0; i < a.Length; i++)
{
for (int j = 0; j <= i; j++)
{
b[j] += a[i];
if (!assigned || b[j] > max)
{
max = b[j];
maxStart = j;
maxEnd = i;
assigned = true;
}
}
}

Проход массива a - один

kamputer

Напишу решение в приват (за пиво).
// Местным рюхам: вот только не надо демпинговать, ладно?

Marinavo_0507

> Местным рюхам: вот только не надо демпинговать, ладно?
Это ты демпингуешь.

yolki

обычно ещё добавляют: и без использования дополнительных массивов

artimon

Собственно эту фразу я и хотел увидеть от 'а

Helga87


bool assigned = false;
int max = 0;
int maxStart = 0;
int maxEnd = 0;
int current = 0;
int currentStart = 0;

for (int i = 0; i < a.Length; i++)
{
current += a[i];
if (!assigned || current > max)
{
max = current;
maxStart = currentStart;
maxEnd = i;
assigned = true;
}
if (current < 0)
{
currentStart = i + 1;
current = 0;
}
}

olga1969

Не работает, если все элементы массива отрицательные.

Helga87

Работает, проверь

Dasar

в условии не сказано, может быть результирующая подпоследовательность нулевой длины или нет.

maggi14

Эту лажовую задачу мне дали на собеседовании в СиБосс 5 лет назад На 6 таких задач давалось полтора часа, насколько я помню
Оставить комментарий
Имя или ник:
Комментарий: