From 7b6396220b6a0e77f1fac6d87bc13f9b2bb3ea50 Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Fri, 31 Oct 2025 07:12:03 +0800 Subject: [PATCH] feat: add rust solutions to lc problem: No.3289 --- .../README.md | 45 +++++++++++++++++++ .../README_EN.md | 45 +++++++++++++++++++ .../Solution.rs | 17 +++++++ .../Solution2.rs | 18 ++++++++ 4 files changed, 125 insertions(+) create mode 100644 solution/3200-3299/3289.The Two Sneaky Numbers of Digitville/Solution.rs create mode 100644 solution/3200-3299/3289.The Two Sneaky Numbers of Digitville/Solution2.rs diff --git a/solution/3200-3299/3289.The Two Sneaky Numbers of Digitville/README.md b/solution/3200-3299/3289.The Two Sneaky Numbers of Digitville/README.md index aab5e2d521018..2b173077f5cd5 100644 --- a/solution/3200-3299/3289.The Two Sneaky Numbers of Digitville/README.md +++ b/solution/3200-3299/3289.The Two Sneaky Numbers of Digitville/README.md @@ -168,6 +168,28 @@ function getSneakyNumbers(nums: number[]): number[] { } ``` +#### Rust + +```rust +use std::collections::HashMap; + +impl Solution { + pub fn get_sneaky_numbers(nums: Vec) -> Vec { + let mut cnt = HashMap::new(); + for x in nums { + *cnt.entry(x).or_insert(0) += 1; + } + let mut ans = Vec::new(); + for (x, v) in cnt { + if v == 2 { + ans.push(x); + } + } + ans + } +} +``` + @@ -296,6 +318,29 @@ function getSneakyNumbers(nums: number[]): number[] { } ``` +#### Rust + +```rust +impl Solution { + pub fn get_sneaky_numbers(nums: Vec) -> Vec { + let n = nums.len() as i32 - 2; + let mut xx = nums[n as usize] ^ nums[(n + 1) as usize]; + for i in 0..n { + xx ^= i ^ nums[i as usize]; + } + let k = xx.trailing_zeros(); + let mut ans = vec![0, 0]; + for &x in &nums { + ans[((x >> k) & 1) as usize] ^= x; + } + for i in 0..n { + ans[((i >> k) & 1) as usize] ^= i; + } + ans + } +} +``` + diff --git a/solution/3200-3299/3289.The Two Sneaky Numbers of Digitville/README_EN.md b/solution/3200-3299/3289.The Two Sneaky Numbers of Digitville/README_EN.md index c97469ba8f15f..dc3d54b48c2eb 100644 --- a/solution/3200-3299/3289.The Two Sneaky Numbers of Digitville/README_EN.md +++ b/solution/3200-3299/3289.The Two Sneaky Numbers of Digitville/README_EN.md @@ -164,6 +164,28 @@ function getSneakyNumbers(nums: number[]): number[] { } ``` +#### Rust + +```rust +use std::collections::HashMap; + +impl Solution { + pub fn get_sneaky_numbers(nums: Vec) -> Vec { + let mut cnt = HashMap::new(); + for x in nums { + *cnt.entry(x).or_insert(0) += 1; + } + let mut ans = Vec::new(); + for (x, v) in cnt { + if v == 2 { + ans.push(x); + } + } + ans + } +} +``` + @@ -292,6 +314,29 @@ function getSneakyNumbers(nums: number[]): number[] { } ``` +#### Rust + +```rust +impl Solution { + pub fn get_sneaky_numbers(nums: Vec) -> Vec { + let n = nums.len() as i32 - 2; + let mut xx = nums[n as usize] ^ nums[(n + 1) as usize]; + for i in 0..n { + xx ^= i ^ nums[i as usize]; + } + let k = xx.trailing_zeros(); + let mut ans = vec![0, 0]; + for &x in &nums { + ans[((x >> k) & 1) as usize] ^= x; + } + for i in 0..n { + ans[((i >> k) & 1) as usize] ^= i; + } + ans + } +} +``` + diff --git a/solution/3200-3299/3289.The Two Sneaky Numbers of Digitville/Solution.rs b/solution/3200-3299/3289.The Two Sneaky Numbers of Digitville/Solution.rs new file mode 100644 index 0000000000000..aed1765788c2d --- /dev/null +++ b/solution/3200-3299/3289.The Two Sneaky Numbers of Digitville/Solution.rs @@ -0,0 +1,17 @@ +use std::collections::HashMap; + +impl Solution { + pub fn get_sneaky_numbers(nums: Vec) -> Vec { + let mut cnt = HashMap::new(); + for x in nums { + *cnt.entry(x).or_insert(0) += 1; + } + let mut ans = Vec::new(); + for (x, v) in cnt { + if v == 2 { + ans.push(x); + } + } + ans + } +} diff --git a/solution/3200-3299/3289.The Two Sneaky Numbers of Digitville/Solution2.rs b/solution/3200-3299/3289.The Two Sneaky Numbers of Digitville/Solution2.rs new file mode 100644 index 0000000000000..32ac1510418db --- /dev/null +++ b/solution/3200-3299/3289.The Two Sneaky Numbers of Digitville/Solution2.rs @@ -0,0 +1,18 @@ +impl Solution { + pub fn get_sneaky_numbers(nums: Vec) -> Vec { + let n = nums.len() as i32 - 2; + let mut xx = nums[n as usize] ^ nums[(n + 1) as usize]; + for i in 0..n { + xx ^= i ^ nums[i as usize]; + } + let k = xx.trailing_zeros(); + let mut ans = vec![0, 0]; + for &x in &nums { + ans[((x >> k) & 1) as usize] ^= x; + } + for i in 0..n { + ans[((i >> k) & 1) as usize] ^= i; + } + ans + } +}