Maximum Sum Circular Subarray
Problem page:https://leetcode.com/problems/maximum-sum-circular-subarray
Solution
class Solution:
def maxSubarraySumCircular(self, nums: List[int]) -> int:
total,cur_max,cur_min = 0,0,0
max_sum, min_sum = -sys.maxsize-1,sys.maxsize
for num in nums:
total += num
cur_max = max(cur_max + num,num)
cur_min = min(cur_min + num, num)
max_sum = max(max_sum,cur_max)
min_sum = min(cur_min, min_sum)
return max_sum if max_sum < 0 else max(max_sum, total - min_sum)
Complexity
- time: O(n)
- space: O(1)