diff --git a/solution/3500-3599/3583.Count Special Triplets/README.md b/solution/3500-3599/3583.Count Special Triplets/README.md index 73eadc65ed7e4..bfd9096886704 100644 --- a/solution/3500-3599/3583.Count Special Triplets/README.md +++ b/solution/3500-3599/3583.Count Special Triplets/README.md @@ -239,6 +239,43 @@ function specialTriplets(nums: number[]): number { } ``` +#### Rust + +```rust +use std::collections::HashMap; + +impl Solution { + pub fn special_triplets(nums: Vec) -> i32 { + let mut left: HashMap = HashMap::new(); + let mut right: HashMap = HashMap::new(); + + for &x in &nums { + *right.entry(x).or_insert(0) += 1; + } + + let modulo: i64 = 1_000_000_007; + let mut ans: i64 = 0; + + for &x in &nums { + if let Some(v) = right.get_mut(&x) { + *v -= 1; + } + + let t = x * 2; + + let l = *left.get(&t).unwrap_or(&0); + let r = *right.get(&t).unwrap_or(&0); + + ans = (ans + (l * r) % modulo) % modulo; + + *left.entry(x).or_insert(0) += 1; + } + + ans as i32 + } +} +``` + diff --git a/solution/3500-3599/3583.Count Special Triplets/README_EN.md b/solution/3500-3599/3583.Count Special Triplets/README_EN.md index e619c6cee9b6b..dc3ac7cdfda0d 100644 --- a/solution/3500-3599/3583.Count Special Triplets/README_EN.md +++ b/solution/3500-3599/3583.Count Special Triplets/README_EN.md @@ -237,6 +237,43 @@ function specialTriplets(nums: number[]): number { } ``` +#### Rust + +```rust +use std::collections::HashMap; + +impl Solution { + pub fn special_triplets(nums: Vec) -> i32 { + let mut left: HashMap = HashMap::new(); + let mut right: HashMap = HashMap::new(); + + for &x in &nums { + *right.entry(x).or_insert(0) += 1; + } + + let modulo: i64 = 1_000_000_007; + let mut ans: i64 = 0; + + for &x in &nums { + if let Some(v) = right.get_mut(&x) { + *v -= 1; + } + + let t = x * 2; + + let l = *left.get(&t).unwrap_or(&0); + let r = *right.get(&t).unwrap_or(&0); + + ans = (ans + (l * r) % modulo) % modulo; + + *left.entry(x).or_insert(0) += 1; + } + + ans as i32 + } +} +``` + diff --git a/solution/3500-3599/3583.Count Special Triplets/Solution.rs b/solution/3500-3599/3583.Count Special Triplets/Solution.rs new file mode 100644 index 0000000000000..1aedfc8c2d453 --- /dev/null +++ b/solution/3500-3599/3583.Count Special Triplets/Solution.rs @@ -0,0 +1,32 @@ +use std::collections::HashMap; + +impl Solution { + pub fn special_triplets(nums: Vec) -> i32 { + let mut left: HashMap = HashMap::new(); + let mut right: HashMap = HashMap::new(); + + for &x in &nums { + *right.entry(x).or_insert(0) += 1; + } + + let modulo: i64 = 1_000_000_007; + let mut ans: i64 = 0; + + for &x in &nums { + if let Some(v) = right.get_mut(&x) { + *v -= 1; + } + + let t = x * 2; + + let l = *left.get(&t).unwrap_or(&0); + let r = *right.get(&t).unwrap_or(&0); + + ans = (ans + (l * r) % modulo) % modulo; + + *left.entry(x).or_insert(0) += 1; + } + + ans as i32 + } +}