diff --git a/rs/subarrays-with-k-different-integers.rs b/rs/subarrays-with-k-different-integers.rs new file mode 100644 index 0000000..08b56f3 --- /dev/null +++ b/rs/subarrays-with-k-different-integers.rs @@ -0,0 +1,39 @@ +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 + } +}