Учитывая целочисленный массив nums
, найти непрерывный подмассив (содержащий , по меньшей мере , один номер) , который имеет самую большую сумму и вернуть его сумму.
Пример:
Входной сигнал: [-2,1, -3,4, -1,2,1, -5,4], выход: 6 Пояснение: [4, -1,2,1] имеет самую большую сумму = 6.
С учетом эффекта:
Учитывая массив, и нашел с наибольшими непрерывными подмассивами, и возвращает максимальное значение.
Понимание:
Первоначальный максимум и максимум, а сумма значений временного НУМСА [0].
Когда сумма <0, то следующий номер, если НУМС [я] больше, чем сумма, сброс суммы к НУМСУ [I].
Когда сумма> 0, число непосредственно добавив следующий НУМС [I].
Всегда нужно быть максимальная сумма и максимальное сравнение, обновление максимальное значение.
Код C ++:
класс решений { общественности : INT maxSubArray (вектор < INT > & НУМС) { INT п = nums.size (); если (п == 0 ) возвращение 0 ; INT макс = НУМС [ 0 ], сумма = НУМС [ 0 ], я; для (я = 1 ; <п; ++ я) {
если (сумма < 0 && сумма < НУМС [я]) { сумма = НУМС [I]; если (макс <сумма) макс = сумма; Продолжить; } Сумма = сумма + НУМС [I]; если (макс <сумма) макс = сумма; } Если (макс <сумма) макс = сумма; вернуться макс; } };
Результат:
При выполнении с: 12
MS
потреблением памяти:
9,4 Мб