function atMost(nums, k):
count = empty map
left = 0
result = 0
for right from 0 to nums.length - 1:
count[nums[right]] = count.get(nums[right], 0) + 1
while count.size > k:
count[nums[left]] = count[nums[left]] - 1
if count[nums[left]] == 0:
count.remove(nums[left])
left = left + 1
result = result + (right - left + 1)
return result
Time: . Space: .