'''
Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.

Example:

Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.
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.
'''
class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        dp = [0 for x in range(len(nums))]
        dp[0] = nums[0]
        for x in range(len(nums) - 1):
            dp[x + 1] = max(nums[x + 1], dp[x] + nums[x + 1])
        return max(dp)

f78c5969811008fb76e6c868cbb4eeaf9846fb2a
<mask token>

<mask token>


class Solution:
    <mask token>

<mask token>


class Solution:

    def maxSubArray(self, nums: List[int]) ->int:
        dp = [(0) for x in range(len(nums))]
        dp[0] = nums[0]
        for x in range(len(nums) - 1):
            dp[x + 1] = max(nums[x + 1], dp[x] + nums[x + 1])
        return max(dp)

'''
Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.

Example:

Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.
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.
'''
class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        dp = [0 for x in range(len(nums))]
        dp[0] = nums[0]
        for x in range(len(nums) - 1):
            dp[x + 1] = max(nums[x + 1], dp[x] + nums[x + 1])
        return max(dp)
