2461. Maximum Sum of Distinct Subarrays With Length K

You are given an integer array nums and an integer k. Find the maximum subarray sum of all the subarrays of nums that meet the following conditions:

  • The length of the subarray is k, and
  • All the elements of the subarray are distinct.

Return the maximum subarray sum of all the subarrays that meet the conditions. If no subarray meets the conditions, return 0.

subarray is a contiguous non-empty sequence of elements within an array.

Example 1:

Input: nums = [1,5,4,2,9,9,9], k = 3
Output: 15
Explanation: The subarrays of nums with length 3 are:
- [1,5,4] which meets the requirements and has a sum of 10.
- [5,4,2] which meets the requirements and has a sum of 11.
- [4,2,9] which meets the requirements and has a sum of 15.
- [2,9,9] which does not meet the requirements because the element 9 is repeated.
- [9,9,9] which does not meet the requirements because the element 9 is repeated.
We return 15 because it is the maximum subarray sum of all the subarrays that meet the conditions

Example 2:

Input: nums = [4,4,4], k = 3
Output: 0
Explanation: The subarrays of nums with length 3 are:
- [4,4,4] which does not meet the requirements because the element 4 is repeated.
We return 0 because no subarrays meet the conditions.

Constraints:

  • 1 <= k <= nums.length <= 105
  • 1 <= nums[i] <= 105

Approach 01:

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    long long maximumSubarraySum(vector<int>& nums, int subarraySize) {
        long maxSum = 0;
        long currentSum = 0;
        int uniqueCount = 0;
        unordered_map<int, int> frequencyMap;

        for (int i = 0; i < nums.size(); ++i) {
            currentSum += nums[i];

            if (++frequencyMap[nums[i]] == 1) // New unique element
                ++uniqueCount;

            // Remove the element that is sliding out of the window
            if (i >= subarraySize) {
                if (--frequencyMap[nums[i - subarraySize]] == 0)
                    --uniqueCount;
                currentSum -= nums[i - subarraySize];
            }

            // Check if the current subarray has exactly `subarraySize` unique
            // elements
            if (i >= subarraySize - 1 && uniqueCount == subarraySize)
                maxSum = max(maxSum, currentSum);
        }

        return maxSum;
    }
};
from typing import List

class Solution:
    def maximumSubarraySum(self, nums: List[int], subarraySize: int) -> int:
        maxSum = 0
        currentSum = 0
        uniqueCount = 0
        frequencyMap = {}

        for i in range(len(nums)):
            currentSum += nums[i]

            # Add the current number to the frequency map
            frequencyMap[nums[i]] = frequencyMap.get(nums[i], 0) + 1
            if frequencyMap[nums[i]] == 1:  # New unique element
                uniqueCount += 1

            # Remove the element sliding out of the window
            if i >= subarraySize:
                frequencyMap[nums[i - subarraySize]] -= 1
                if frequencyMap[nums[i - subarraySize]] == 0:
                    uniqueCount -= 1
                currentSum -= nums[i - subarraySize]

            # Check if the current subarray has exactly `subarraySize` unique elements
            if i >= subarraySize - 1 and uniqueCount == subarraySize:
                maxSum = max(maxSum, currentSum)

        return maxSum

Time Complexity

  • Sliding Window Traversal:

    The function iterates through the array using a single loop, visiting each element once. This takes \( O(n) \), where \( n \) is the size of the array.

  • Map Operations:

    Updating and accessing the frequency map (unordered_map) takes \( O(1) \) on average due to hash map operations. These operations are performed for each element, so they contribute \( O(n) \) overall.

  • Overall Time Complexity:

    The overall time complexity is \( O(n) \).

Space Complexity

  • Frequency Map:

    The space used by the unordered_map depends on the number of unique elements in the array. In the worst case (all elements are unique), the space complexity is \( O(k) \), where \( k \) is the subarray size.

  • Auxiliary Variables:

    Variables like maxSum, currentSum, and uniqueCount take \( O(1) \) space.

  • Overall Space Complexity:

    The overall space complexity is \( O(k) \), where \( k \) is the subarray size.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top