Maximum Erasure Value

medium sliding window hash set

Problem

Given an array of positive integers, find the maximum sum of any contiguous subarray with all unique values.

Inputnums = [4,2,4,5,6]
Output17
Window [2,4,5,6] sums to 17.

def maximum_unique_subarray(nums):
    seen = set()
    left = 0
    cur = best = 0
    for right, x in enumerate(nums):
        while x in seen:
            seen.remove(nums[left])
            cur -= nums[left]
            left += 1
        seen.add(x)
        cur += x
        best = max(best, cur)
    return best
function maximumUniqueSubarray(nums) {
  const seen = new Set();
  let left = 0, cur = 0, best = 0;
  for (let right = 0; right < nums.length; right++) {
    while (seen.has(nums[right])) {
      seen.delete(nums[left]);
      cur -= nums[left];
      left++;
    }
    seen.add(nums[right]);
    cur += nums[right];
    if (cur > best) best = cur;
  }
  return best;
}
class Solution {
    public int maximumUniqueSubarray(int[] nums) {
        Set<Integer> seen = new HashSet<>();
        int left = 0, cur = 0, best = 0;
        for (int right = 0; right < nums.length; right++) {
            while (!seen.add(nums[right])) {
                seen.remove(nums[left]);
                cur -= nums[left++];
            }
            cur += nums[right];
            best = Math.max(best, cur);
        }
        return best;
    }
}
int maximumUniqueSubarray(vector<int>& nums) {
    unordered_set<int> seen;
    int left = 0, cur = 0, best = 0;
    for (int right = 0; right < (int)nums.size(); right++) {
        while (seen.count(nums[right])) {
            seen.erase(nums[left]);
            cur -= nums[left++];
        }
        seen.insert(nums[right]);
        cur += nums[right];
        best = max(best, cur);
    }
    return best;
}
Time: O(n) Space: O(n)