53. Maximum Subarray
Решение задачи 53 “Максимальный подмассив” с LeetCode.
Условие задачи
Дан массив nums
целых чисел. Необходимо найти непрерывная подмассив ( содержащий хотя бы один элемент), сумма элементов которого маскимальна – и вернуть эту сумму.
пример
|
|
Решение
Грубой силой
Если массив пустой, то сумма равна нулю.
Если массив из одного элемента – значение этого элемента и есть максимальная сумма.
Идея простая - завести переменную в которой хранить значение максимальной суммы ( для начала присвоить значения первого элемента ).
Теперь запускаем первый цикл от 0 элемента до конца массива(итератор idx
).
Присваиваем переменной sum
нуль. В этой переменной будет хранить значение текущей суммы.
Запускаем второй цикл: от текущего элемента до конца массива ( итераторв jdx
. Добавляем значение nums[jdx]
к текущей сумму sum
. Сравниваем текущую сумму с максимальной суммой – если текущая сумма больше, то присваиваем значние текущей суммы в максимальную.
Таким образом мы подсчитает сумму значений всех возможных подмассивов.
|
|
Жадный алгоритм
Идея жадного алгоритма :
- пройтись по массиву
- сверять текущий элемент с суммой
sum
и текущего элемента - если сумма больше, то добавить в
sum
значение текущего элемента - если сумма меньше, то присвоить в
sum
текущий элемент - сравнить
sum
иmaxsum
( еслиmaxsum
меньшеsum
- записать значниеsum
вmaxsum
)
|
|