Проблема
Учитывая целочисленный массив nums
, найдите непрерывный подмассив (содержащий хотя бы одно число), который имеет наибольшую сумму, и верните его сумму.
Примеры
Input : [-2, 1, -3, 4, -1, 2, 1, -5, 4] Output : 6 Explanation : [4, -1, 2, 1] has the largest sum = 6.
Примечание
Будет найдено решение с временной сложностью O (n), которое не должно генерировать суммы целых подмассивов ввода.
Решение
Используя алгоритм Кадане — подход динамического программирования, решение сравнивает накопленные значения каждого индекса, чтобы эффективно найти максимальную сумму смежных массивов.
var maxSubArray = function(nums) { let current = 0; let maxNum = nums[0]; for(let i = 0; i < nums.length; i++) { current = Math.max(current + nums[i], nums[i]); maxNum = Math.max(current, maxNum); } return maxNum; };
Визуализированные массивы для вашего удобства
i) Since current = 0, for index 0 it will be Math.max(-2, -2); ii) Now that both current and maxNum are initialized to 0, i will be incremented - with Math.max(-1, 1) the current will be initialized to 1 and so as the maxNum iii) Remember to either to initialize current to nums[i] + current OR nums[i] based on the maximum output.
Поскольку сумма подмассива [4, -1, 2, 1] имеет наибольшую сумму, выход будет 6.