53. Maximum Subarray

Medium (Trung bình) C++ 🔗 Xem trên LeetCode

📋 Đề Bài

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

 

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.

💻 Lời Giải

C++ 0053-maximum-subarray.cpp
class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        // Time: O(N)
        // Ky thuat Kadane
        
        int maxSum = 0, ans = INT_MIN;
        
        for (int num : nums) {
            maxSum = max(maxSum + num, num);
            ans = max(ans, maxSum);
        }
        
        // nums = [-2,1,-3,4,-1,2,1,-5,4]
        // maxSum = -2, num = 1
        // max(-2 + 1, 1)
        
        return ans;
    }
};