impl Solution { pub fn subarrays_with_k_distinct(nums: Vec, mut k: i32) -> i32 { let mut freqs = vec![0; nums.len() + 1]; let mut count = 0; let mut current_count = 0; let mut i = 0; let mut j = 0; while j < nums.len() { freqs[nums[j] as usize] += 1; if freqs[nums[j] as usize] == 1 { k -= 1; } j += 1; if k < 0 { freqs[nums[i] as usize] -= 1; k += 1; current_count = 0; i += 1; } if k == 0 { while freqs[nums[i] as usize] > 1 { freqs[nums[left] as usize] -= 1; current_count += 1; i += 1; } count += current_count + 1; } } count } }