diff --git a/solution/1800-1899/1865.Finding Pairs With a Certain Sum/README.md b/solution/1800-1899/1865.Finding Pairs With a Certain Sum/README.md index 80dc383ff6383..ac3ed046196a6 100644 --- a/solution/1800-1899/1865.Finding Pairs With a Certain Sum/README.md +++ b/solution/1800-1899/1865.Finding Pairs With a Certain Sum/README.md @@ -273,6 +273,52 @@ class FindSumPairs { */ ``` +#### Rust + +```rust +use std::collections::HashMap; + +struct FindSumPairs { + nums1: Vec, + nums2: Vec, + cnt: HashMap, +} + +impl FindSumPairs { + fn new(nums1: Vec, nums2: Vec) -> Self { + let mut cnt = HashMap::new(); + for &x in &nums2 { + *cnt.entry(x).or_insert(0) += 1; + } + Self { nums1, nums2, cnt } + } + + fn add(&mut self, index: i32, val: i32) { + let i = index as usize; + let old_val = self.nums2[i]; + *self.cnt.entry(old_val).or_insert(0) -= 1; + if self.cnt[&old_val] == 0 { + self.cnt.remove(&old_val); + } + + self.nums2[i] += val; + let new_val = self.nums2[i]; + *self.cnt.entry(new_val).or_insert(0) += 1; + } + + fn count(&self, tot: i32) -> i32 { + let mut ans = 0; + for &x in &self.nums1 { + let target = tot - x; + if let Some(&c) = self.cnt.get(&target) { + ans += c; + } + } + ans + } +} +``` + #### JavaScript ```js diff --git a/solution/1800-1899/1865.Finding Pairs With a Certain Sum/README_EN.md b/solution/1800-1899/1865.Finding Pairs With a Certain Sum/README_EN.md index 37f4847d8a54f..d232604af2812 100644 --- a/solution/1800-1899/1865.Finding Pairs With a Certain Sum/README_EN.md +++ b/solution/1800-1899/1865.Finding Pairs With a Certain Sum/README_EN.md @@ -271,6 +271,52 @@ class FindSumPairs { */ ``` +#### Rust + +```rust +use std::collections::HashMap; + +struct FindSumPairs { + nums1: Vec, + nums2: Vec, + cnt: HashMap, +} + +impl FindSumPairs { + fn new(nums1: Vec, nums2: Vec) -> Self { + let mut cnt = HashMap::new(); + for &x in &nums2 { + *cnt.entry(x).or_insert(0) += 1; + } + Self { nums1, nums2, cnt } + } + + fn add(&mut self, index: i32, val: i32) { + let i = index as usize; + let old_val = self.nums2[i]; + *self.cnt.entry(old_val).or_insert(0) -= 1; + if self.cnt[&old_val] == 0 { + self.cnt.remove(&old_val); + } + + self.nums2[i] += val; + let new_val = self.nums2[i]; + *self.cnt.entry(new_val).or_insert(0) += 1; + } + + fn count(&self, tot: i32) -> i32 { + let mut ans = 0; + for &x in &self.nums1 { + let target = tot - x; + if let Some(&c) = self.cnt.get(&target) { + ans += c; + } + } + ans + } +} +``` + #### JavaScript ```js diff --git a/solution/1800-1899/1865.Finding Pairs With a Certain Sum/Solution.rs b/solution/1800-1899/1865.Finding Pairs With a Certain Sum/Solution.rs new file mode 100644 index 0000000000000..336e1c5147d81 --- /dev/null +++ b/solution/1800-1899/1865.Finding Pairs With a Certain Sum/Solution.rs @@ -0,0 +1,41 @@ +use std::collections::HashMap; + +struct FindSumPairs { + nums1: Vec, + nums2: Vec, + cnt: HashMap, +} + +impl FindSumPairs { + fn new(nums1: Vec, nums2: Vec) -> Self { + let mut cnt = HashMap::new(); + for &x in &nums2 { + *cnt.entry(x).or_insert(0) += 1; + } + Self { nums1, nums2, cnt } + } + + fn add(&mut self, index: i32, val: i32) { + let i = index as usize; + let old_val = self.nums2[i]; + *self.cnt.entry(old_val).or_insert(0) -= 1; + if self.cnt[&old_val] == 0 { + self.cnt.remove(&old_val); + } + + self.nums2[i] += val; + let new_val = self.nums2[i]; + *self.cnt.entry(new_val).or_insert(0) += 1; + } + + fn count(&self, tot: i32) -> i32 { + let mut ans = 0; + for &x in &self.nums1 { + let target = tot - x; + if let Some(&c) = self.cnt.get(&target) { + ans += c; + } + } + ans + } +}