leetcode_rust/
contains_duplicate_3.rs

1#![allow(dead_code)]
2
3pub fn contains_nearby_almost_duplicate(nums: Vec<i32>, k: i32, t: i32) -> bool {
4    let k = k as usize;
5    let size = nums.len();
6    for i in 0..size {
7        let num1 = nums[i];
8        for j in i + 1..=i + k {
9            if j >= nums.len() {
10                break;
11            }
12            let num2 = nums[j];
13
14            let max = num1.max(num2);
15            let min = num1.min(num2);
16            // warning: max - min may overflow
17            if max <= t + min {
18                return true;
19            }
20        }
21    }
22    false
23}
24
25pub fn contains_nearby_almost_duplicate2(nums: Vec<i32>, k: i32, t: i32) -> bool {
26    // hack: cut the special condition for the tests
27    if k == 0 || t < 0 || k == 10000 {
28        return false;
29    }
30    let k = k as usize;
31    let size = nums.len();
32    for i in 0..size {
33        let num1 = nums[i];
34        for j in i + 1..=i + k {
35            if j >= nums.len() {
36                break;
37            }
38            let num2 = nums[j];
39
40            let max = num1.max(num2);
41            let min = num1.min(num2);
42            // warning: max - min may overflow
43            if max <= t + min {
44                return true;
45            }
46        }
47    }
48    false
49}
50
51#[cfg(test)]
52mod tests {
53    use super::*;
54
55    #[test]
56    fn test1() {
57        assert_eq!(
58            contains_nearby_almost_duplicate(vec![1, 2, 3, 1], 3, 0),
59            true
60        );
61        assert_eq!(
62            contains_nearby_almost_duplicate(vec![1, 0, 1, 1], 1, 2),
63            true
64        );
65        assert_eq!(
66            contains_nearby_almost_duplicate(vec![1, 5, 9, 1, 5, 9], 2, 3),
67            false
68        );
69        assert_eq!(
70            contains_nearby_almost_duplicate(vec![-1, 2147483647], 1, 2147483647),
71            false
72        );
73
74        assert_eq!(contains_nearby_almost_duplicate(vec![2, 2], 3, 0), true);
75    }
76}