File tree Expand file tree Collapse file tree 3 files changed +124
-0
lines changed
solution/0600-0699/0632.Smallest Range Covering Elements from K Lists Expand file tree Collapse file tree 3 files changed +124
-0
lines changed Original file line number Diff line number Diff line change @@ -209,6 +209,49 @@ func smallestRange(nums [][]int) []int {
209
209
}
210
210
```
211
211
212
+ ### ** Rust**
213
+
214
+ ``` rust
215
+ impl Solution {
216
+ pub fn smallest_range (nums : Vec <Vec <i32 >>) -> Vec <i32 > {
217
+ let mut t = vec! [];
218
+ for (i , x ) in nums . iter (). enumerate () {
219
+ for & v in x {
220
+ t . push ((v , i ));
221
+ }
222
+ }
223
+ t . sort_unstable ();
224
+ let (mut ans , n ) = (vec! [- 1000000 , 1000000 ], nums . len ());
225
+ let mut j = 0 ;
226
+ let mut cnt = std :: collections :: HashMap :: new ();
227
+
228
+ for (b , v ) in t . iter () {
229
+ let (b , v ) = (* b , * v );
230
+ if let Some (x ) = cnt . get_mut (& v ) {
231
+ * x += 1 ;
232
+ } else {
233
+ cnt . insert (v , 1 );
234
+ }
235
+ while cnt . len () == n {
236
+ let (a , w ) = t [j ];
237
+ let x = b - a - (ans [1 ] - ans [0 ]);
238
+ if x < 0 || (x == 0 && a < ans [0 ]) {
239
+ ans = vec! [a , b ];
240
+ }
241
+ if let Some (x ) = cnt . get_mut (& w ) {
242
+ * x -= 1 ;
243
+ }
244
+ if cnt [& w ] == 0 {
245
+ cnt . remove (& w );
246
+ }
247
+ j += 1 ;
248
+ }
249
+ }
250
+ ans
251
+ }
252
+ }
253
+ ```
254
+
212
255
### ** ...**
213
256
214
257
```
Original file line number Diff line number Diff line change @@ -187,6 +187,49 @@ func smallestRange(nums [][]int) []int {
187
187
}
188
188
```
189
189
190
+ ### ** Rust**
191
+
192
+ ``` rust
193
+ impl Solution {
194
+ pub fn smallest_range (nums : Vec <Vec <i32 >>) -> Vec <i32 > {
195
+ let mut t = vec! [];
196
+ for (i , x ) in nums . iter (). enumerate () {
197
+ for & v in x {
198
+ t . push ((v , i ));
199
+ }
200
+ }
201
+ t . sort_unstable ();
202
+ let (mut ans , n ) = (vec! [- 1000000 , 1000000 ], nums . len ());
203
+ let mut j = 0 ;
204
+ let mut cnt = std :: collections :: HashMap :: new ();
205
+
206
+ for (b , v ) in t . iter () {
207
+ let (b , v ) = (* b , * v );
208
+ if let Some (x ) = cnt . get_mut (& v ) {
209
+ * x += 1 ;
210
+ } else {
211
+ cnt . insert (v , 1 );
212
+ }
213
+ while cnt . len () == n {
214
+ let (a , w ) = t [j ];
215
+ let x = b - a - (ans [1 ] - ans [0 ]);
216
+ if x < 0 || (x == 0 && a < ans [0 ]) {
217
+ ans = vec! [a , b ];
218
+ }
219
+ if let Some (x ) = cnt . get_mut (& w ) {
220
+ * x -= 1 ;
221
+ }
222
+ if cnt [& w ] == 0 {
223
+ cnt . remove (& w );
224
+ }
225
+ j += 1 ;
226
+ }
227
+ }
228
+ ans
229
+ }
230
+ }
231
+ ```
232
+
190
233
### ** ...**
191
234
192
235
```
Original file line number Diff line number Diff line change
1
+ impl Solution {
2
+ pub fn smallest_range ( nums : Vec < Vec < i32 > > ) -> Vec < i32 > {
3
+ let mut t = vec ! [ ] ;
4
+ for ( i, x) in nums. iter ( ) . enumerate ( ) {
5
+ for & v in x {
6
+ t. push ( ( v, i) ) ;
7
+ }
8
+ }
9
+ t. sort_unstable ( ) ;
10
+ let ( mut ans, n) = ( vec ! [ -1000000 , 1000000 ] , nums. len ( ) ) ;
11
+ let mut j = 0 ;
12
+ let mut cnt = std:: collections:: HashMap :: new ( ) ;
13
+
14
+ for ( b, v) in t. iter ( ) {
15
+ let ( b, v) = ( * b, * v) ;
16
+ if let Some ( x) = cnt. get_mut ( & v) {
17
+ * x += 1 ;
18
+ } else {
19
+ cnt. insert ( v, 1 ) ;
20
+ }
21
+ while cnt. len ( ) == n {
22
+ let ( a, w) = t[ j] ;
23
+ let x = b - a - ( ans[ 1 ] - ans[ 0 ] ) ;
24
+ if x < 0 || ( x == 0 && a < ans[ 0 ] ) {
25
+ ans = vec ! [ a, b] ;
26
+ }
27
+ if let Some ( x) = cnt. get_mut ( & w) {
28
+ * x -= 1 ;
29
+ }
30
+ if cnt[ & w] == 0 {
31
+ cnt. remove ( & w) ;
32
+ }
33
+ j += 1 ;
34
+ }
35
+ }
36
+ ans
37
+ }
38
+ }
You can’t perform that action at this time.
0 commit comments