File tree 8 files changed +142
-14
lines changed
2000-2099/2012.Sum of Beauty in the Array
2500-2599/2588.Count the Number of Beautiful Subarrays
8 files changed +142
-14
lines changed Original file line number Diff line number Diff line change @@ -202,6 +202,33 @@ function sumOfBeauties(nums: number[]): number {
202
202
}
203
203
```
204
204
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
+
205
232
<!-- tabs: end -->
206
233
207
234
<!-- solution: end -->
Original file line number Diff line number Diff line change @@ -203,6 +203,33 @@ function sumOfBeauties(nums: number[]): number {
203
203
}
204
204
```
205
205
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
+
206
233
<!-- tabs: end -->
207
234
208
235
<!-- solution: end -->
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change @@ -114,8 +114,7 @@ class Solution {
114
114
int mask = 0 ;
115
115
for (int x : nums) {
116
116
mask ^ = x;
117
- ans += cnt. getOrDefault(mask, 0 );
118
- cnt. merge(mask, 1 , Integer :: sum);
117
+ ans += cnt. merge(mask, 1 , Integer :: sum) - 1 ;
119
118
}
120
119
return ans;
121
120
}
@@ -133,8 +132,7 @@ public:
133
132
int mask = 0;
134
133
for (int x : nums) {
135
134
mask ^= x;
136
- ans += cnt[ mask] ;
137
- ++cnt[ mask] ;
135
+ ans += cnt[ mask] ++;
138
136
}
139
137
return ans;
140
138
}
@@ -173,6 +171,27 @@ function beautifulSubarrays(nums: number[]): number {
173
171
}
174
172
```
175
173
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
+
176
195
<!-- tabs: end -->
177
196
178
197
<!-- solution: end -->
Original file line number Diff line number Diff line change @@ -112,8 +112,7 @@ class Solution {
112
112
int mask = 0 ;
113
113
for (int x : nums) {
114
114
mask ^ = x;
115
- ans += cnt. getOrDefault(mask, 0 );
116
- cnt. merge(mask, 1 , Integer :: sum);
115
+ ans += cnt. merge(mask, 1 , Integer :: sum) - 1 ;
117
116
}
118
117
return ans;
119
118
}
@@ -131,8 +130,7 @@ public:
131
130
int mask = 0;
132
131
for (int x : nums) {
133
132
mask ^= x;
134
- ans += cnt[ mask] ;
135
- ++cnt[ mask] ;
133
+ ans += cnt[ mask] ++;
136
134
}
137
135
return ans;
138
136
}
@@ -171,6 +169,27 @@ function beautifulSubarrays(nums: number[]): number {
171
169
}
172
170
```
173
171
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
+
174
193
<!-- tabs: end -->
175
194
176
195
<!-- solution: end -->
Original file line number Diff line number Diff line change @@ -6,9 +6,8 @@ class Solution {
6
6
int mask = 0 ;
7
7
for (int x : nums) {
8
8
mask ^= x;
9
- ans += cnt[mask];
10
- ++cnt[mask];
9
+ ans += cnt[mask]++;
11
10
}
12
11
return ans;
13
12
}
14
- };
13
+ };
Original file line number Diff line number Diff line change @@ -6,9 +6,8 @@ public long beautifulSubarrays(int[] nums) {
6
6
int mask = 0 ;
7
7
for (int x : nums ) {
8
8
mask ^= x ;
9
- ans += cnt .getOrDefault (mask , 0 );
10
- cnt .merge (mask , 1 , Integer ::sum );
9
+ ans += cnt .merge (mask , 1 , Integer ::sum ) - 1 ;
11
10
}
12
11
return ans ;
13
12
}
14
- }
13
+ }
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments