leetcode_rust/
contains_duplicate_2.rs1#![allow(dead_code)]
2
3pub fn contains_nearby_duplicate(nums: Vec<i32>, k: i32) -> bool {
4 use std::collections::HashMap;
5
6 let mut map: HashMap<i32, usize> = HashMap::new();
7 for num in nums.into_iter().enumerate() {
8 match map.get_mut(&num.1) {
9 Some(v) => {
10 if num.0 - *v <= k as usize {
11 return true;
12 } else {
13 *v = num.0;
14 }
15 }
16
17 None => {
18 map.insert(num.1, num.0);
19 }
20 }
21 }
22
23 false
24}
25
26pub fn contains_nearby_duplicate2(nums: Vec<i32>, k: i32) -> bool {
27 use std::collections::HashSet;
28
29 let mut set = HashSet::new();
31 let k = k as usize;
32 for (i, num) in nums.clone().into_iter().enumerate() {
33 if set.contains(&num) {
34 return true;
35 } else {
36 set.insert(num);
37 if set.len() > k {
38 let temp = nums[i - k];
39 set.remove(&temp);
40 }
41 }
42 }
43
44 false
45}
46
47#[cfg(test)]
48mod tests {
49 use super::*;
50
51 #[test]
52 fn test1() {
53 assert_eq!(contains_nearby_duplicate(vec![1, 2, 3, 1, 2, 3], 2), false);
54 assert_eq!(contains_nearby_duplicate(vec![1, 0, 1, 1], 1), true);
55 }
56
57 #[test]
58 fn test2() {
59 assert_eq!(contains_nearby_duplicate2(vec![1, 2, 3, 1, 2, 3], 2), false);
60 assert_eq!(contains_nearby_duplicate2(vec![1, 0, 1, 1], 1), true);
61 }
62}