From 960717ebc75ad5589d4142368a7581a7b21e0758 Mon Sep 17 00:00:00 2001 From: xiaolatiao <1628652790@qq.com> Date: Sat, 29 Jul 2023 15:11:36 +0800 Subject: [PATCH] feat: add rust solution to lc problem: No.2475 Signed-off-by: xiaolatiao <1628652790@qq.com> --- .../README.md | 66 +++++++++++++++++++ .../README_EN.md | 66 +++++++++++++++++++ 2 files changed, 132 insertions(+) diff --git a/solution/2400-2499/2475.Number of Unequal Triplets in Array/README.md b/solution/2400-2499/2475.Number of Unequal Triplets in Array/README.md index 0e1e0fed3d48e..3eac228fbc2c3 100644 --- a/solution/2400-2499/2475.Number of Unequal Triplets in Array/README.md +++ b/solution/2400-2499/2475.Number of Unequal Triplets in Array/README.md @@ -385,6 +385,72 @@ impl Solution { } ``` +```rust +use std::collections::HashMap; + +impl Solution { + pub fn unequal_triplets(nums: Vec) -> i32 { + let cnt = nums.iter().fold(HashMap::new(), |mut map, &n| { + *map.entry(n).or_insert(0) += 1; + map + }); + + let mut ans = 0; + let n = nums.len(); + let mut a = 0; + for &b in cnt.values() { + let c = n - a - b; + ans += a * b * c; + a += b; + } + + ans as i32 + } +} +``` + +```rust +impl Solution { + pub fn unequal_triplets(nums: Vec) -> i32 { + let mut ans = 0; + let mut nums = nums; + nums.sort(); + let n = nums.len(); + + for i in 1..n - 1 { + + let mut l = 0; + let mut r = i; + while l < r { + let mid = (l + r) >> 1; + if nums[mid] >= nums[i] { + r = mid; + } else { + l = mid + 1; + } + } + let j = r; + + let mut l = i + 1; + let mut r = n; + while l < r { + let mid = (l + r) >> 1; + if nums[mid] > nums[i] { + r = mid; + } else { + l = mid + 1; + } + } + let k = r; + + ans += j * (n - k) + } + + ans as i32 + } +} +``` + ### **...** ``` diff --git a/solution/2400-2499/2475.Number of Unequal Triplets in Array/README_EN.md b/solution/2400-2499/2475.Number of Unequal Triplets in Array/README_EN.md index 554081788416f..d7946c96ba659 100644 --- a/solution/2400-2499/2475.Number of Unequal Triplets in Array/README_EN.md +++ b/solution/2400-2499/2475.Number of Unequal Triplets in Array/README_EN.md @@ -353,6 +353,72 @@ impl Solution { } ``` +```rust +use std::collections::HashMap; + +impl Solution { + pub fn unequal_triplets(nums: Vec) -> i32 { + let cnt = nums.iter().fold(HashMap::new(), |mut map, &n| { + *map.entry(n).or_insert(0) += 1; + map + }); + + let mut ans = 0; + let n = nums.len(); + let mut a = 0; + for &b in cnt.values() { + let c = n - a - b; + ans += a * b * c; + a += b; + } + + ans as i32 + } +} +``` + +```rust +impl Solution { + pub fn unequal_triplets(nums: Vec) -> i32 { + let mut ans = 0; + let mut nums = nums; + nums.sort(); + let n = nums.len(); + + for i in 1..n - 1 { + + let mut l = 0; + let mut r = i; + while l < r { + let mid = (l + r) >> 1; + if nums[mid] >= nums[i] { + r = mid; + } else { + l = mid + 1; + } + } + let j = r; + + let mut l = i + 1; + let mut r = n; + while l < r { + let mid = (l + r) >> 1; + if nums[mid] > nums[i] { + r = mid; + } else { + l = mid + 1; + } + } + let k = r; + + ans += j * (n - k) + } + + ans as i32 + } +} +``` + ### **...** ```