--- title: '53. Maximum Subarray' description: Given an integer array nums, find the subarray with the largest sum, and return its sum icon: dot topics: - { name: "Array", slug: "array" } - { name: "Divide and Conquer", slug: "divide-and-conquer" } - { name: "Dynamic Programming", slug: "dynamic-programming" } sidebar: label: 'Maximum Subarray' badge: 'Medium' --- ::::warning If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle. :::: ### Example 1: - Input: `nums = [-2,1,-3,4,-1,2,1,-5,4]` - Output: `6` - Explanation: The subarray `[4,-1,2,1]` has the largest sum `6`. ### Example 2: - Input: `nums = [1]` - Output: `1` - Explanation: The subarray `[1]` has the largest sum `1`. ### Example 3: - Input: `nums = [5,4,-1,7,8]` - Output: `23` - Explanation: The subarray `[5,4,-1,7,8]` has the largest sum `23`. ### Constraints: - `1 <= nums.length <= 10^5` - `-10^4 <= nums[i] <= 10^4` ## Solution ```py class Solution: def maxSubArray(self, nums: list[int]) -> int: best, total = nums[0], nums[0] for i in range(1, len(nums)): if total < 0: total = nums[i] else: total = total + nums[i] best = max(best, total) return best ```