1031 maximum sum of two non overlapping subarrays

https://leetcode.com/problems/maximum-sum-of-two-non-overlapping-subarrays/description/

这是最简单的O(n^2)解法,但是可以通过,不是很想想更优解了

class Solution {
    public int maxSumTwoNoOverlap(int[] nums, int firstLen, int secondLen) {
        int ans = Integer.MIN_VALUE;
        for (int i = 0; i < nums.length; i++) {
            if (i + 1 >= firstLen && nums.length - i - 1 >= secondLen) {
                int tmp = Math.max(ans, maxsum(nums, 0, i, firstLen) + 
                                   maxsum(nums, i + 1, nums.length - 1, secondLen));
                ans = Math.max(ans, tmp);
            }
            if (i + 1 >= secondLen && nums.length - i - 1 >= firstLen) {
                int tmp = Math.max(ans, maxsum(nums, 0, i, secondLen) + 
                                   maxsum(nums, i + 1, nums.length - 1, firstLen));
                ans = Math.max(ans, tmp);
            }
        }
        return ans;
    }
    private int maxsum(int[] nums, int start, int end, int len) {
        int maxsum = 0;
        int sum = 0;
        for (int i = start; i <= end; i++) {
            if (i - start + 1 <= len) {
                sum += nums[i];
                if (i - start + 1 == len) maxsum = sum;
            } else {
                sum -= nums[i - len];
                sum += nums[i];
                maxsum = Math.max(sum, maxsum);
            }
        }
        return maxsum;
    }
}

Last updated