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