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); } }