leetcode918.环形子数组的最大和
参考了灵神的题解,然后只要用动态规划求解子数组的最大和和最小和就可以
class Solution {public int maxSubarraySumCircular(int[] nums) {int sum = nums[0];//变量记录普通子数组的最大和int currentMax = nums[0];int globalMax = nums[0];//变量记录普通子数组的最小和int currentMin = nums[0];int globalMin = nums[0];//动态规划求解普通子数组的最大和和最小和for (int i = 1; i < nums.length; i++) {sum += nums[i];currentMax = Math.max(currentMax + nums[i], nums[i]);globalMax = Math.max(globalMax, currentMax);currentMin = Math.min(currentMin + nums[i], nums[i]);globalMin = Math.min(globalMin, currentMin);}return sum == globalMin ? globalMax : Math.max(globalMax, sum - globalMin);}
}