Learn DSA
Depth-First Search
Greedy Algorithms
Sliding Window
Max Sum of Distinct Subarrays Length k
medium
DESCRIPTION (credit Leetcode.com)
Given an integer array nums and an integer k, write a function to identify the highest possible sum of a subarray within nums, where the subarray meets the following criteria: its length is k, and all of its elements are unique.
Example 1: Input:
Output:
Explanation: The subarrays of nums with length 4 are:
We return 20 because it is the maximum subarray sum of all the subarrays that meet the conditions.
💻 Desktop Required
The code editor works best on larger screens. Please open this page on your computer to write and run code.
"Write a function that takes an integer array `nums` and an integer `k`, and returns the maximum sum of any subarray of length `k` that contains only distinct elements."
Run your code to see results here
Have suggestions or found something wrong?
Explanation
- curr_sum: The sum of all elements in the window.
- state: A dictionary mapping each element in the window to the number of times it appears in the window.
def maxSum(nums, k):max_sum = 0start = 0state = {}curr_sum = 0for end in range(len(nums)):curr_sum = curr_sum + nums[end]state[nums[end]] = state.get(nums[end], 0) + 1if end - start + 1 == k:if len(state) == k:max_sum = max(max_sum, curr_sum)curr_sum = curr_sum - nums[start]state[nums[start]] = state[nums[start]] - 1if state[nums[start]] == 0:del state[nums[start]]start += 1return max_sum
start
max sum distinct subarrays of size k
0 / 5
def maxSum(nums, k):max_sum = 0start = 0state = {}curr_sum = 0for end in range(len(nums)):curr_sum = curr_sum + nums[end]state[nums[end]] = state.get(nums[end], 0) + 1if end - start + 1 == k:if len(state) == k:max_sum = max(max_sum, curr_sum)curr_sum = curr_sum - nums[start]state[nums[start]] = state[nums[start]] - 1if state[nums[start]] == 0:del state[nums[start]]start += 1return max_sum
curr_sum: 10
start: 0 | end: 3
expand window
0 / 4
def maxSum(nums, k):max_sum = 0start = 0state = {}curr_sum = 0for end in range(len(nums)):curr_sum = curr_sum + nums[end]state[nums[end]] = state.get(nums[end], 0) + 1if end - start + 1 == k:if len(state) == k:max_sum = max(max_sum, curr_sum)curr_sum = curr_sum - nums[start]state[nums[start]] = state[nums[start]] - 1if state[nums[start]] == 0:del state[nums[start]]start += 1return max_sum
curr_sum: 15
start: 2 | end: 5
expand window
0 / 10
Solution
def maxSum(nums, k):max_sum = 0start = 0state = {}curr_sum = 0for end in range(len(nums)):curr_sum = curr_sum + nums[end]state[nums[end]] = state.get(nums[end], 0) + 1if end - start + 1 == k:if len(state) == k:max_sum = max(max_sum, curr_sum)curr_sum = curr_sum - nums[start]state[nums[start]] = state[nums[start]] - 1if state[nums[start]] == 0:del state[nums[start]]start += 1return max_sum
start
max sum distinct subarrays of size k
0 / 19
Login to track your progress
Your account is free and you can post anonymously if you choose.