class Solution {
public int maxSubarraySumCircular(int[] nums) {
int len = nums.length;
int all = nums[0];
int[] fmax = new int[len];
int[] fmin = new int[len];
int rmax = nums[0];
int rmin = nums[0];
fmax[0] = nums[0];
fmin[0] = nums[0];
for(int i=1; i<len; i++){
all += nums[i];
fmax[i] = Math.max(nums[i],nums[i]+fmax[i-1]);
fmin[i] = Math.min(nums[i],nums[i]+fmin[i-1]);
rmax = Math.max(rmax,fmax[i]);
rmin = Math.min(rmin,fmin[i]);
}
if(all==rmin) return rmax;
return Math.max(rmax,all-rmin);
}
}