Skip to content

Commit c9cd048

Browse files
authored
feat: add solutions to lc problems: No.2012,2598 (#4111)
1 parent ad0ff4f commit c9cd048

File tree

8 files changed

+142
-14
lines changed

8 files changed

+142
-14
lines changed

solution/2000-2099/2012.Sum of Beauty in the Array/README.md

+27
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,33 @@ function sumOfBeauties(nums: number[]): number {
202202
}
203203
```
204204

205+
#### Rust
206+
207+
```rust
208+
impl Solution {
209+
pub fn sum_of_beauties(nums: Vec<i32>) -> i32 {
210+
let n = nums.len();
211+
let mut right: Vec<i32> = vec![0; n];
212+
right[n - 1] = nums[n - 1];
213+
for i in (1..n - 1).rev() {
214+
right[i] = right[i + 1].min(nums[i]);
215+
}
216+
let mut ans = 0;
217+
let mut l = nums[0];
218+
for i in 1..n - 1 {
219+
let r = right[i + 1];
220+
if l < nums[i] && nums[i] < r {
221+
ans += 2;
222+
} else if nums[i - 1] < nums[i] && nums[i] < nums[i + 1] {
223+
ans += 1;
224+
}
225+
l = l.max(nums[i]);
226+
}
227+
ans
228+
}
229+
}
230+
```
231+
205232
<!-- tabs:end -->
206233

207234
<!-- solution:end -->

solution/2000-2099/2012.Sum of Beauty in the Array/README_EN.md

+27
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,33 @@ function sumOfBeauties(nums: number[]): number {
203203
}
204204
```
205205

206+
#### Rust
207+
208+
```rust
209+
impl Solution {
210+
pub fn sum_of_beauties(nums: Vec<i32>) -> i32 {
211+
let n = nums.len();
212+
let mut right: Vec<i32> = vec![0; n];
213+
right[n - 1] = nums[n - 1];
214+
for i in (1..n - 1).rev() {
215+
right[i] = right[i + 1].min(nums[i]);
216+
}
217+
let mut ans = 0;
218+
let mut l = nums[0];
219+
for i in 1..n - 1 {
220+
let r = right[i + 1];
221+
if l < nums[i] && nums[i] < r {
222+
ans += 2;
223+
} else if nums[i - 1] < nums[i] && nums[i] < nums[i + 1] {
224+
ans += 1;
225+
}
226+
l = l.max(nums[i]);
227+
}
228+
ans
229+
}
230+
}
231+
```
232+
206233
<!-- tabs:end -->
207234

208235
<!-- solution:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
impl Solution {
2+
pub fn sum_of_beauties(nums: Vec<i32>) -> i32 {
3+
let n = nums.len();
4+
let mut right: Vec<i32> = vec![0; n];
5+
right[n - 1] = nums[n - 1];
6+
for i in (1..n - 1).rev() {
7+
right[i] = right[i + 1].min(nums[i]);
8+
}
9+
let mut ans = 0;
10+
let mut l = nums[0];
11+
for i in 1..n - 1 {
12+
let r = right[i + 1];
13+
if l < nums[i] && nums[i] < r {
14+
ans += 2;
15+
} else if nums[i - 1] < nums[i] && nums[i] < nums[i + 1] {
16+
ans += 1;
17+
}
18+
l = l.max(nums[i]);
19+
}
20+
ans
21+
}
22+
}

solution/2500-2599/2588.Count the Number of Beautiful Subarrays/README.md

+23-4
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,7 @@ class Solution {
114114
int mask = 0;
115115
for (int x : nums) {
116116
mask ^= x;
117-
ans += cnt.getOrDefault(mask, 0);
118-
cnt.merge(mask, 1, Integer::sum);
117+
ans += cnt.merge(mask, 1, Integer::sum) - 1;
119118
}
120119
return ans;
121120
}
@@ -133,8 +132,7 @@ public:
133132
int mask = 0;
134133
for (int x : nums) {
135134
mask ^= x;
136-
ans += cnt[mask];
137-
++cnt[mask];
135+
ans += cnt[mask]++;
138136
}
139137
return ans;
140138
}
@@ -173,6 +171,27 @@ function beautifulSubarrays(nums: number[]): number {
173171
}
174172
```
175173

174+
#### Rust
175+
176+
```rust
177+
use std::collections::HashMap;
178+
179+
impl Solution {
180+
pub fn beautiful_subarrays(nums: Vec<i32>) -> i64 {
181+
let mut cnt = HashMap::new();
182+
cnt.insert(0, 1);
183+
let mut ans = 0;
184+
let mut mask = 0;
185+
for &x in nums.iter() {
186+
mask ^= x;
187+
ans += *cnt.get(&mask).unwrap_or(&0);
188+
*cnt.entry(mask).or_insert(0) += 1;
189+
}
190+
ans
191+
}
192+
}
193+
```
194+
176195
<!-- tabs:end -->
177196

178197
<!-- solution:end -->

solution/2500-2599/2588.Count the Number of Beautiful Subarrays/README_EN.md

+23-4
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,7 @@ class Solution {
112112
int mask = 0;
113113
for (int x : nums) {
114114
mask ^= x;
115-
ans += cnt.getOrDefault(mask, 0);
116-
cnt.merge(mask, 1, Integer::sum);
115+
ans += cnt.merge(mask, 1, Integer::sum) - 1;
117116
}
118117
return ans;
119118
}
@@ -131,8 +130,7 @@ public:
131130
int mask = 0;
132131
for (int x : nums) {
133132
mask ^= x;
134-
ans += cnt[mask];
135-
++cnt[mask];
133+
ans += cnt[mask]++;
136134
}
137135
return ans;
138136
}
@@ -171,6 +169,27 @@ function beautifulSubarrays(nums: number[]): number {
171169
}
172170
```
173171

172+
#### Rust
173+
174+
```rust
175+
use std::collections::HashMap;
176+
177+
impl Solution {
178+
pub fn beautiful_subarrays(nums: Vec<i32>) -> i64 {
179+
let mut cnt = HashMap::new();
180+
cnt.insert(0, 1);
181+
let mut ans = 0;
182+
let mut mask = 0;
183+
for &x in nums.iter() {
184+
mask ^= x;
185+
ans += *cnt.get(&mask).unwrap_or(&0);
186+
*cnt.entry(mask).or_insert(0) += 1;
187+
}
188+
ans
189+
}
190+
}
191+
```
192+
174193
<!-- tabs:end -->
175194

176195
<!-- solution:end -->

solution/2500-2599/2588.Count the Number of Beautiful Subarrays/Solution.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@ class Solution {
66
int mask = 0;
77
for (int x : nums) {
88
mask ^= x;
9-
ans += cnt[mask];
10-
++cnt[mask];
9+
ans += cnt[mask]++;
1110
}
1211
return ans;
1312
}
14-
};
13+
};

solution/2500-2599/2588.Count the Number of Beautiful Subarrays/Solution.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@ public long beautifulSubarrays(int[] nums) {
66
int mask = 0;
77
for (int x : nums) {
88
mask ^= x;
9-
ans += cnt.getOrDefault(mask, 0);
10-
cnt.merge(mask, 1, Integer::sum);
9+
ans += cnt.merge(mask, 1, Integer::sum) - 1;
1110
}
1211
return ans;
1312
}
14-
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
use std::collections::HashMap;
2+
3+
impl Solution {
4+
pub fn beautiful_subarrays(nums: Vec<i32>) -> i64 {
5+
let mut cnt = HashMap::new();
6+
cnt.insert(0, 1);
7+
let mut ans = 0;
8+
let mut mask = 0;
9+
for &x in nums.iter() {
10+
mask ^= x;
11+
ans += *cnt.get(&mask).unwrap_or(&0);
12+
*cnt.entry(mask).or_insert(0) += 1;
13+
}
14+
ans
15+
}
16+
}

0 commit comments

Comments
 (0)