918. Maximum Sum Circular Subarray LeetCode Solution
In this guide, you will get 918. Maximum Sum Circular Subarray LeetCode Solution with the best time and space complexity. The solution to Maximum Sum Circular Subarray problem is provided in various programming languages like C++, Java, and Python. This will be helpful for you if you are preparing for placements, hackathons, interviews, or practice purposes. The solutions provided here are very easy to follow and include detailed explanations.
Table of Contents
- Problem Statement
- Complexity Analysis
- Maximum Sum Circular Subarray solution in C++
- Maximum Sum Circular Subarray solution in Java
- Maximum Sum Circular Subarray solution in Python
- Additional Resources
Problem Statement of Maximum Sum Circular Subarray
Given a circular integer array nums of length n, return the maximum possible sum of a non-empty subarray of nums.
A circular array means the end of the array connects to the beginning of the array. Formally, the next element of nums[i] is nums[(i + 1) % n] and the previous element of nums[i] is nums[(i – 1 + n) % n].
A subarray may only include each element of the fixed buffer nums at most once. Formally, for a subarray nums[i], nums[i + 1], …, nums[j], there does not exist i <= k1, k2 <= j with k1 % n == k2 % n.
Example 1:
Input: nums = [1,-2,3,-2]
Output: 3
Explanation: Subarray [3] has maximum sum 3.
Example 2:
Input: nums = [5,-3,5]
Output: 10
Explanation: Subarray [5,5] has maximum sum 5 + 5 = 10.
Example 3:
Input: nums = [-3,-2,-3]
Output: -2
Explanation: Subarray [-2] has maximum sum -2.
Constraints:
n == nums.length
1 <= n <= 3 * 104
-3 * 104 <= nums[i] <= 3 * 104
Complexity Analysis
- Time Complexity:
- Space Complexity:
918. Maximum Sum Circular Subarray LeetCode Solution in C++
class Solution {
public:
int maxSubarraySumCircular(vector<int>& nums) {
int totalSum = 0;
int currMaxSum = 0;
int currMinSum = 0;
int maxSum = INT_MIN;
int minSum = INT_MAX;
for (const int num : nums) {
totalSum += num;
currMaxSum = max(currMaxSum + num, num);
currMinSum = min(currMinSum + num, num);
maxSum = max(maxSum, currMaxSum);
minSum = min(minSum, currMinSum);
}
return maxSum < 0 ? maxSum : max(maxSum, totalSum - minSum);
}
};
/* code provided by PROGIEZ */
918. Maximum Sum Circular Subarray LeetCode Solution in Java
class Solution {
public int maxSubarraySumCircular(int[] nums) {
int totalSum = 0;
int currMaxSum = 0;
int currMinSum = 0;
int maxSum = Integer.MIN_VALUE;
int minSum = Integer.MAX_VALUE;
for (final int num : nums) {
totalSum += num;
currMaxSum = Math.max(currMaxSum + num, num);
currMinSum = Math.min(currMinSum + num, num);
maxSum = Math.max(maxSum, currMaxSum);
minSum = Math.min(minSum, currMinSum);
}
return maxSum < 0 ? maxSum : Math.max(maxSum, totalSum - minSum);
}
}
// code provided by PROGIEZ
918. Maximum Sum Circular Subarray LeetCode Solution in Python
class Solution:
def maxSubarraySumCircular(self, nums: list[int]) -> int:
totalSum = 0
currMaxSum = 0
currMinSum = 0
maxSum = -math.inf
minSum = math.inf
for num in nums:
totalSum += num
currMaxSum = max(currMaxSum + num, num)
currMinSum = min(currMinSum + num, num)
maxSum = max(maxSum, currMaxSum)
minSum = min(minSum, currMinSum)
return maxSum if maxSum < 0 else max(maxSum, totalSum - minSum)
# code by PROGIEZ
Additional Resources
- Explore all LeetCode problem solutions at Progiez here
- Explore all problems on LeetCode website here
Happy Coding! Keep following PROGIEZ for more updates and solutions.