最大子数组和-力扣
题目:
53. 最大子数组和
918. 环形子数组的最大和
解析:
情况 1 就是 53 题的情况
情况 2 要先算出 leftMax[j] 代表 0 到 j 区间的累加最大值;
之后再枚举 [j:n] j>0 累加上多少了
代码:
class Solution {public int maxSubarraySumCircular(int[] nums) {int ans = nums[0];int n = nums.length;int[] leftMax = new int[n];leftMax[0] = nums[0];int[] dp = new int[n];dp[0] = nums[0];int sum = nums[0];for(int i = 1; i < n; i++){dp[i] = Math.max(nums[i], dp[i - 1] + nums[i]);sum += nums[i];leftMax[i] = Math.max(leftMax[i - 1], sum);ans = Math.max(ans, dp[i]);}System.out.println(Arrays.toString(leftMax));for(int i = 1; i < n; i++){sum -= nums[i - 1];//[i : n-1]ans = Math.max(ans, leftMax[i - 1] + sum);}return ans;}
}