Easy
Given an integer array nums
, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.
A subarray is a contiguous part of an array.
Example 1:
Input: nums = [-2,1,-3,4,-1,2,1,-5,4]
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.
Example 2:
Input: nums = [1]
Output: 1
Example 3:
Input: nums = [5,4,-1,7,8]
Output: 23
Constraints:
1 <= nums.length <= 105
-104 <= nums[i] <= 104
Follow up: If you have figured out the O(n)
solution, try coding another solution using the divide and conquer approach, which is more subtle.
To solve the Maximum Subarray problem, we can use the Kadane’s algorithm, which efficiently finds the maximum subarray sum in linear time. Here are the steps to solve the task:
max_sum
and current_sum
to keep track of the maximum sum found so far and the sum of the current subarray, respectively.max_sum
and current_sum
to the value of the first element in the array nums
.nums
from the second element (index 1).num
in nums
, do the following:
current_sum
to be the maximum of either num
or current_sum + num
. This step ensures that we consider either starting a new subarray or extending the current subarray.max_sum
to be the maximum of either max_sum
or current_sum
. This step ensures that we keep track of the maximum subarray sum found so far.max_sum
will contain the maximum subarray sum.max_sum
as the result.class Solution:
def maxSubArray(self, nums: List[int]) -> int:
# Initialize variables
max_sum = current_sum = nums[0]
# Iterate through the array
for num in nums[1:]:
current_sum = max(num, current_sum + num)
max_sum = max(max_sum, current_sum)
return max_sum
# Example Usage:
solution = Solution()
nums1 = [-2, 1, -3, 4, -1, 2, 1, -5, 4]
print(solution.maxSubArray(nums1)) # Output: 6
nums2 = [1]
print(solution.maxSubArray(nums2)) # Output: 1
nums3 = [5, 4, -1, 7, 8]
print(solution.maxSubArray(nums3)) # Output: 23
This algorithm has a time complexity of O(n), where n is the length of the input array nums
. Therefore, it efficiently finds the maximum subarray sum.