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