letecode [53] - Максимальная подмассива

Учитывая целочисленный массив  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 Мб

рекомендация

отwww.cnblogs.com/lpomeloz/p/10972182.html