cyga

Maximum Sum Circular Subarray

May 16th, 2020
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.74 KB | None | 0 0
  1. class Solution:
  2.     def maxSubarraySumCircular(self, A: List[int]) -> int:
  3.         n = len(A)
  4.         max_cur = A[0]
  5.         max_total = max_cur
  6.         for i in range(1,n):
  7.             max_cur = max(max_cur + A[i], A[i])
  8.             max_total = max(max_total, max_cur)
  9.            
  10.         pref = [A[0]]*n
  11.         sum_pref = A[0]
  12.         suf = [A[n-1]]*n
  13.         sum_suf = A[n-1]
  14.         for i in range(1,n):
  15.             sum_pref += A[i]
  16.             pref[i] = max(pref[i-1], sum_pref)
  17.             sum_suf += A[n-1-i]
  18.             suf[n-1-i] = max(suf[n-i], sum_suf)
  19.            
  20.         for i in range(1,n):
  21.             if pref[i-1]+suf[i] > max_total:
  22.                 max_total = pref[i-1]+suf[i]
  23.                
  24.         return max_total
Advertisement
Add Comment
Please, Sign In to add comment