Shortest Subarray Whose Distinct-Value Sum Reaches a Target
OracleSoftware Engineer · OnsiteLast updated
Find the length of the shortest contiguous subarray of positive integers whose sum reaches a target when each distinct value is counted only once. A coding-screen problem that tests reasoning about contiguous ranges, bookkeeping for repeated values, and correct handling of the case where no subarray qualifies.
Given an array of positive integers nums and a positive integer target, return the length of the shortest contiguous subarray whose distinct sum is at least target. The distinct sum of a subarray adds each different value once, however many times that value occurs in the subarray: the distinct sum of [3, 3, 2] is 3 + 2 = 5. Return 0 if no subarray qualifies.
Function Signature
def shortest_distinct_sum_subarray(nums: list[int], target: int) -> int:
Rules
- A subarray is a nonempty run of consecutive elements
nums[i], nums[i + 1], ..., nums[j]. Its length isj - i + 1and counts every element, including repeated ones. - A value that occurs several times in the subarray, next to each other or apart, adds to the distinct sum once.
- Return the smallest length among all subarrays whose distinct sum is at least
target, or0if there is none.
Constraints
1 <= len(nums) <= 10^51 <= nums[i] <= 10^41 <= target <= 10^9- every distinct sum is below
10^8, so all values fit in a 32-bit signed integer
Examples
Example 1
Input: nums = [5, 5, 1, 2, 6], target = 9
Output: 3
[1, 2, 6] has distinct sum 9. No subarray of length 2 qualifies: as an ordinary sum [5, 5] would give 10, but its distinct sum is 5, and the best pair, [2, 6], reaches only 8.
Example 2
Input: nums = [4, 4, 4, 3], target = 8
Output: 0
An ordinary sum would accept [4, 4], but no subarray has a distinct sum above 4 + 3 = 7.
Example 3
Input: nums = [4, 2, 2, 5], target = 11
Output: 4
A distinct sum of 11 needs all three values 4, 2 and 5, and only the whole array contains both the 4 and the 5. Its length, 4, counts the repeated 2.
Solution walkthrough is for members
Get the full walkthrough with reference code and complexity analysis, plus Kitty Coach at 300 messages a day. Hints, the code runner and community answers stay free.