1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| class Solution { public int maxSubarraySumCircular(int[] nums) { int[] f = new int[nums.length]; int[] g = new int[nums.length];
f[0] = g[0] = nums[0];
int maxSubArraySum = f[0]; int minSubArraySum = g[0];
for (int i = 1; i < nums.length; i++) { f[i] = Math.max(f[i - 1] + nums[i], nums[i]); g[i] = Math.min(g[i - 1] + nums[i], nums[i]); maxSubArraySum = Math.max(maxSubArraySum, f[i]); minSubArraySum = Math.min(minSubArraySum, g[i]); }
int sum = 0; for (int num : nums) { sum += num; }
if (sum == minSubArraySum) { return maxSubArraySum; }
return Math.max(maxSubArraySum, sum - minSubArraySum); } }
|
References
918. Maximum Sum Circular Subarray