File tree Expand file tree Collapse 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 Expand file tree Collapse file tree 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 {
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 -->
Original file line number Diff line number Diff 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 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 {
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 -->
Original file line number Diff line number Diff 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 -->
Original file line number Diff line number Diff 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+ };
Original file line number Diff line number Diff 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 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