Post

Leetcode 0053. Maximum Subarray

Given an integer array nums, find the `subarray` with the largest sum, and return its sum. A `subarray` is a contiguous non-empty sequence of elements within an array.  Example 1:  Input: nums = [-2,1,-3,4,-1,2,1,-5,4], Output: 6 

Description

Given an integer array nums, find the subarray with the largest sum, and return its sum.

A subarray is a contiguous non-empty sequence of elements within an array.

Example 1:

Input: nums = [-2,1,-3,4,-1,2,1,-5,4]
Output: 6
  • The subarray [4,-1,2,1] has the largest sum 6.

Example 2:

Input: nums = [1]
Output: 1
  • The subarray [1] has the largest sum 1.

Example 3:

Input: nums = [5,4,-1,7,8]
Output: 23
  • The subarray [5,4,-1,7,8] has the largest sum 23.

Constraints:

  • 1 <= nums.length <= 10^5
  • -10^4 <= nums[i] <= 10^4

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.

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
    /**
     * Kadane's Algorithm
     * Time Complexity: BigO(n)
     * Space Complexity: BigO(1)
     */
    public int maxSubArray(int[] nums) {
        int currMax = nums[0];
        int max = nums[0];
        int numsLength = nums.length;
        for (int i = 1; i < numsLength; i++) {
            if (nums[i] > currMax + nums[i])
                currMax = nums[i];
            else
                currMax += nums[i];
            if (currMax > max)
                max = currMax;
        }
        return max;
    }
}
This post is licensed under CC BY 4.0 by the author.