Skip to content

Commit 918e254

Browse files
committed
feat: add Rust solution for lc No.1878
1 parent 091a18a commit 918e254

4 files changed

Lines changed: 211 additions & 3 deletions

File tree

solution/1800-1899/1878.Get Biggest Three Rhombus Sums in a Grid/README.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -928,6 +928,68 @@ class TreeMultiSet<T = number> {
928928
}
929929
```
930930

931+
#### Rust
932+
933+
```rust
934+
use std::collections::BTreeSet;
935+
936+
impl Solution {
937+
pub fn get_biggest_three(grid: Vec<Vec<i32>>) -> Vec<i32> {
938+
let m = grid.len();
939+
let n = grid[0].len();
940+
941+
let mut s1 = vec![vec![0; n + 2]; m + 1];
942+
let mut s2 = vec![vec![0; n + 2]; m + 1];
943+
944+
for i in 1..=m {
945+
for j in 1..=n {
946+
s1[i][j] = s1[i - 1][j - 1] + grid[i - 1][j - 1];
947+
s2[i][j] = s2[i - 1][j + 1] + grid[i - 1][j - 1];
948+
}
949+
}
950+
951+
let mut ss = BTreeSet::new();
952+
953+
for i in 1..=m {
954+
for j in 1..=n {
955+
let l = (i - 1)
956+
.min(m - i)
957+
.min(j - 1)
958+
.min(n - j);
959+
960+
ss.insert(grid[i - 1][j - 1]);
961+
962+
for k in 1..=l {
963+
let a = s1[i + k][j] - s1[i][j - k];
964+
let b = s1[i][j + k] - s1[i - k][j];
965+
let c = s2[i][j - k] - s2[i - k][j];
966+
let d = s2[i + k][j] - s2[i][j + k];
967+
968+
let v = a + b + c + d
969+
- grid[i + k - 1][j - 1]
970+
+ grid[i - k - 1][j - 1];
971+
972+
ss.insert(v);
973+
}
974+
975+
while ss.len() > 3 {
976+
let first = *ss.iter().next().unwrap();
977+
ss.remove(&first);
978+
}
979+
}
980+
}
981+
982+
let mut ans = Vec::with_capacity(ss.len());
983+
while let Some(&v) = ss.iter().next_back() {
984+
ans.push(v);
985+
ss.remove(&v);
986+
}
987+
988+
ans
989+
}
990+
}
991+
```
992+
931993
<!-- tabs:end -->
932994

933995
<!-- solution:end -->

solution/1800-1899/1878.Get Biggest Three Rhombus Sums in a Grid/README_EN.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -924,6 +924,68 @@ class TreeMultiSet<T = number> {
924924
}
925925
```
926926

927+
#### Rust
928+
929+
```rust
930+
use std::collections::BTreeSet;
931+
932+
impl Solution {
933+
pub fn get_biggest_three(grid: Vec<Vec<i32>>) -> Vec<i32> {
934+
let m = grid.len();
935+
let n = grid[0].len();
936+
937+
let mut s1 = vec![vec![0; n + 2]; m + 1];
938+
let mut s2 = vec![vec![0; n + 2]; m + 1];
939+
940+
for i in 1..=m {
941+
for j in 1..=n {
942+
s1[i][j] = s1[i - 1][j - 1] + grid[i - 1][j - 1];
943+
s2[i][j] = s2[i - 1][j + 1] + grid[i - 1][j - 1];
944+
}
945+
}
946+
947+
let mut ss = BTreeSet::new();
948+
949+
for i in 1..=m {
950+
for j in 1..=n {
951+
let l = (i - 1)
952+
.min(m - i)
953+
.min(j - 1)
954+
.min(n - j);
955+
956+
ss.insert(grid[i - 1][j - 1]);
957+
958+
for k in 1..=l {
959+
let a = s1[i + k][j] - s1[i][j - k];
960+
let b = s1[i][j + k] - s1[i - k][j];
961+
let c = s2[i][j - k] - s2[i - k][j];
962+
let d = s2[i + k][j] - s2[i][j + k];
963+
964+
let v = a + b + c + d
965+
- grid[i + k - 1][j - 1]
966+
+ grid[i - k - 1][j - 1];
967+
968+
ss.insert(v);
969+
}
970+
971+
while ss.len() > 3 {
972+
let first = *ss.iter().next().unwrap();
973+
ss.remove(&first);
974+
}
975+
}
976+
}
977+
978+
let mut ans = Vec::with_capacity(ss.len());
979+
while let Some(&v) = ss.iter().next_back() {
980+
ans.push(v);
981+
ss.remove(&v);
982+
}
983+
984+
ans
985+
}
986+
}
987+
```
988+
927989
<!-- tabs:end -->
928990

929991
<!-- solution:end -->
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
use std::collections::BTreeSet;
2+
3+
impl Solution {
4+
pub fn get_biggest_three(grid: Vec<Vec<i32>>) -> Vec<i32> {
5+
let m = grid.len();
6+
let n = grid[0].len();
7+
8+
let mut s1 = vec![vec![0; n + 2]; m + 1];
9+
let mut s2 = vec![vec![0; n + 2]; m + 1];
10+
11+
for i in 1..=m {
12+
for j in 1..=n {
13+
s1[i][j] = s1[i - 1][j - 1] + grid[i - 1][j - 1];
14+
s2[i][j] = s2[i - 1][j + 1] + grid[i - 1][j - 1];
15+
}
16+
}
17+
18+
let mut ss = BTreeSet::new();
19+
20+
for i in 1..=m {
21+
for j in 1..=n {
22+
let l = (i - 1)
23+
.min(m - i)
24+
.min(j - 1)
25+
.min(n - j);
26+
27+
ss.insert(grid[i - 1][j - 1]);
28+
29+
for k in 1..=l {
30+
let a = s1[i + k][j] - s1[i][j - k];
31+
let b = s1[i][j + k] - s1[i - k][j];
32+
let c = s2[i][j - k] - s2[i - k][j];
33+
let d = s2[i + k][j] - s2[i][j + k];
34+
35+
let v = a + b + c + d
36+
- grid[i + k - 1][j - 1]
37+
+ grid[i - k - 1][j - 1];
38+
39+
ss.insert(v);
40+
}
41+
42+
while ss.len() > 3 {
43+
let first = *ss.iter().next().unwrap();
44+
ss.remove(&first);
45+
}
46+
}
47+
}
48+
49+
let mut ans = Vec::with_capacity(ss.len());
50+
while let Some(&v) = ss.iter().next_back() {
51+
ans.push(v);
52+
ss.remove(&v);
53+
}
54+
55+
ans
56+
}
57+
}

solution/3800-3899/3870.Count Commas in Range/README_EN.md

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,15 @@ edit_url: https://github.com/doocs/leetcode/edit/main/solution/3800-3899/3870.Co
6363

6464
<!-- solution:start -->
6565

66-
### Solution 1
66+
### Solution 1: Brain Teaser
67+
68+
Numbers from 1 to 999 contain no commas, so when $n$ is less than or equal to 999, the answer is 0.
69+
70+
Since the range of $n$ is $[1, 10^5]$, when $n$ is greater than or equal to 1000, each number contains exactly one comma, so the answer is $n - 999$.
71+
72+
Therefore, the answer is $\max(0, n - 999)$.
73+
74+
The time complexity is $O(1)$, and the space complexity is $O(1)$.
6775

6876
<!-- tabs:start -->
6977

@@ -78,19 +86,38 @@ class Solution:
7886
#### Java
7987

8088
```java
81-
89+
class Solution {
90+
public int countCommas(int n) {
91+
return Math.max(0, n - 999);
92+
}
93+
}
8294
```
8395

8496
#### C++
8597

8698
```cpp
87-
99+
class Solution {
100+
public:
101+
int countCommas(int n) {
102+
return max(0, n - 999);
103+
}
104+
};
88105
```
89106
90107
#### Go
91108
92109
```go
110+
func countCommas(n int) int {
111+
return max(0, n-999)
112+
}
113+
```
114+
115+
#### TypeScript
93116

117+
```ts
118+
function countCommas(n: number): number {
119+
return Math.max(0, n - 999)
120+
};
94121
```
95122

96123
<!-- tabs:end -->

0 commit comments

Comments
 (0)