Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Maximum Sum of Two Non-Overlapping Subarrays

Updated
3 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "1031" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

Problem Statement

Given an integer array nums and two integers firstLen and secondLen, return the maximum sum of elements in two non-overlapping subarrays with lengths firstLen and secondLen. The array with length firstLen could occur before or after the array with length secondLen, but they have to be non-overlapping. A subarray is a contiguous part of an array. Example 1: Input: nums = [0,6,5,2,2,5,1,9,4], firstLen = 1, secondLen = 2 Output: 20 Explanation: One choice of subarrays is [9] with length 1, and [6,5] with length 2. Example 2: Input: nums = [3,8,1,3,2,1,8,9,0], firstLen = 3, secondLen = 2 Output: 29 Explanation: One choice of subarrays is [3,8,1] with length 3, and [8,9] with length 2. Example 3: Input: nums = [2,1,5,6,0,9,5,0,3,8], firstLen = 4, secondLen = 3 Output: 31 Explanation: One choice of subarrays is [5,6,0,9] with length 4, and [0,3,8] with length 3. Constraints: 1 <= firstLen, secondLen <= 1000 2 <= firstLen + secondLen <= 1000 firstLen + secondLen <= nums.length <= 1000 0 <= nums[i] <= 1000

Explanation

Here's the approach to solve this problem efficiently:

  • Prefix Sums: Calculate prefix sums to efficiently compute the sum of any subarray in O(1) time. This avoids redundant calculations.
  • Iterate and Maximize: Iterate through all possible starting positions of the first subarray. For each position, calculate the maximum possible sum of the second subarray to its left and to its right, ensuring non-overlapping.
  • Swap and Repeat: Repeat the above steps with the lengths of the two subarrays swapped to account for both possible orderings.

  • Runtime Complexity: O(n), where n is the length of the input array. Storage Complexity: O(n) due to the prefix sum array.

Code

    def maxTwoNonOverlapping(nums, firstLen, secondLen):
    """
    Finds the maximum sum of elements in two non-overlapping subarrays with lengths firstLen and secondLen.

    Args:
        nums (List[int]): The input integer array.
        firstLen (int): The length of the first subarray.
        secondLen (int): The length of the second subarray.

    Returns:
        int: The maximum sum of elements in two non-overlapping subarrays.
    """

    def calculate_max_sum(firstLen, secondLen):
        prefix_sum = [0] * (len(nums) + 1)
        for i in range(1, len(nums) + 1):
            prefix_sum[i] = prefix_sum[i - 1] + nums[i - 1]

        max_sum = 0
        for i in range(firstLen, len(nums) - secondLen + 1):
            # First subarray ends at index i-1, calculate its sum
            first_subarray_sum = prefix_sum[i] - prefix_sum[i - firstLen]

            # Find max second subarray sum to the left
            max_second_left = 0
            for j in range(secondLen, i - firstLen + 1):
                max_second_left = max(max_second_left, prefix_sum[j] - prefix_sum[j - secondLen])

            # Find max second subarray sum to the right
            max_second_right = 0
            for j in range(i + secondLen, len(nums) + 1):
                max_second_right = max(max_second_right, prefix_sum[j] - prefix_sum[j - secondLen])

            max_sum = max(max_sum, first_subarray_sum + max(max_second_left, max_second_right))

        return max_sum

    return max(calculate_max_sum(firstLen, secondLen), calculate_max_sum(secondLen, firstLen))

More from this blog

C

Chatmagic blog

2894 posts