File tree Expand file tree Collapse file tree 3 files changed +167
-0
lines changed
solution/2900-2999/2967.Minimum Cost to Make Array Equalindromic Expand file tree Collapse file tree 3 files changed +167
-0
lines changed Original file line number Diff line number Diff line change @@ -308,6 +308,64 @@ function minimumCost(nums: number[]): number {
308
308
}
309
309
```
310
310
311
+ #### Rust
312
+
313
+ ``` rust
314
+ impl Solution {
315
+ pub fn minimum_cost (nums : Vec <i32 >) -> i64 {
316
+ use std :: sync :: Once ;
317
+ use std :: cmp :: min;
318
+
319
+ static INIT : Once = Once :: new ();
320
+ static mut PS : Vec <i64 > = Vec :: new ();
321
+
322
+ INIT . call_once (|| {
323
+ let mut ps_local = Vec :: with_capacity (2 * 100_000 );
324
+ for i in 1 ..= 100_000 {
325
+ let s = i . to_string ();
326
+
327
+ let mut t1 = s . clone ();
328
+ t1 = t1 . chars (). rev (). collect ();
329
+ ps_local . push (format! (" {}{}" , s , t1 ). parse :: <i64 >(). unwrap ());
330
+
331
+ let mut t2 = s [0 .. s . len () - 1 ]. to_string ();
332
+ t2 = t2 . chars (). rev (). collect ();
333
+ ps_local . push (format! (" {}{}" , s , t2 ). parse :: <i64 >(). unwrap ());
334
+ }
335
+ ps_local . sort ();
336
+ unsafe {
337
+ PS = ps_local ;
338
+ }
339
+ });
340
+
341
+ let mut nums = nums ;
342
+ nums . sort ();
343
+
344
+ let mid = nums [nums . len () / 2 ] as i64 ;
345
+
346
+ let i = unsafe {
347
+ match PS . binary_search (& mid ) {
348
+ Ok (i ) => i ,
349
+ Err (i ) => i ,
350
+ }
351
+ };
352
+
353
+ let f = | x : i64 | -> i64 {
354
+ nums . iter (). map (| & v | (v as i64 - x ). abs ()). sum ()
355
+ };
356
+
357
+ let mut ans = i64 :: MAX ;
358
+
359
+ for j in i . saturating_sub (1 )..= (i + 1 ). min (2 * 100_000 - 1 ) {
360
+ let x = unsafe { PS [j ] };
361
+ ans = min (ans , f (x ));
362
+ }
363
+
364
+ ans
365
+ }
366
+ }
367
+ ```
368
+
311
369
<!-- tabs: end -->
312
370
313
371
<!-- solution: end -->
Original file line number Diff line number Diff line change @@ -306,6 +306,64 @@ function minimumCost(nums: number[]): number {
306
306
}
307
307
```
308
308
309
+ #### Rust
310
+
311
+ ``` rust
312
+ impl Solution {
313
+ pub fn minimum_cost (nums : Vec <i32 >) -> i64 {
314
+ use std :: sync :: Once ;
315
+ use std :: cmp :: min;
316
+
317
+ static INIT : Once = Once :: new ();
318
+ static mut PS : Vec <i64 > = Vec :: new ();
319
+
320
+ INIT . call_once (|| {
321
+ let mut ps_local = Vec :: with_capacity (2 * 100_000 );
322
+ for i in 1 ..= 100_000 {
323
+ let s = i . to_string ();
324
+
325
+ let mut t1 = s . clone ();
326
+ t1 = t1 . chars (). rev (). collect ();
327
+ ps_local . push (format! (" {}{}" , s , t1 ). parse :: <i64 >(). unwrap ());
328
+
329
+ let mut t2 = s [0 .. s . len () - 1 ]. to_string ();
330
+ t2 = t2 . chars (). rev (). collect ();
331
+ ps_local . push (format! (" {}{}" , s , t2 ). parse :: <i64 >(). unwrap ());
332
+ }
333
+ ps_local . sort ();
334
+ unsafe {
335
+ PS = ps_local ;
336
+ }
337
+ });
338
+
339
+ let mut nums = nums ;
340
+ nums . sort ();
341
+
342
+ let mid = nums [nums . len () / 2 ] as i64 ;
343
+
344
+ let i = unsafe {
345
+ match PS . binary_search (& mid ) {
346
+ Ok (i ) => i ,
347
+ Err (i ) => i ,
348
+ }
349
+ };
350
+
351
+ let f = | x : i64 | -> i64 {
352
+ nums . iter (). map (| & v | (v as i64 - x ). abs ()). sum ()
353
+ };
354
+
355
+ let mut ans = i64 :: MAX ;
356
+
357
+ for j in i . saturating_sub (1 )..= (i + 1 ). min (2 * 100_000 - 1 ) {
358
+ let x = unsafe { PS [j ] };
359
+ ans = min (ans , f (x ));
360
+ }
361
+
362
+ ans
363
+ }
364
+ }
365
+ ```
366
+
309
367
<!-- tabs: end -->
310
368
311
369
<!-- solution: end -->
Original file line number Diff line number Diff line change
1
+ impl Solution {
2
+ pub fn minimum_cost ( nums : Vec < i32 > ) -> i64 {
3
+ use std:: cmp:: min;
4
+ use std:: sync:: Once ;
5
+
6
+ static INIT : Once = Once :: new ( ) ;
7
+ static mut PS : Vec < i64 > = Vec :: new ( ) ;
8
+
9
+ INIT . call_once ( || {
10
+ let mut ps_local = Vec :: with_capacity ( 2 * 100_000 ) ;
11
+ for i in 1 ..=100_000 {
12
+ let s = i. to_string ( ) ;
13
+
14
+ let mut t1 = s. clone ( ) ;
15
+ t1 = t1. chars ( ) . rev ( ) . collect ( ) ;
16
+ ps_local. push ( format ! ( "{}{}" , s, t1) . parse :: < i64 > ( ) . unwrap ( ) ) ;
17
+
18
+ let mut t2 = s[ 0 ..s. len ( ) - 1 ] . to_string ( ) ;
19
+ t2 = t2. chars ( ) . rev ( ) . collect ( ) ;
20
+ ps_local. push ( format ! ( "{}{}" , s, t2) . parse :: < i64 > ( ) . unwrap ( ) ) ;
21
+ }
22
+ ps_local. sort ( ) ;
23
+ unsafe {
24
+ PS = ps_local;
25
+ }
26
+ } ) ;
27
+
28
+ let mut nums = nums;
29
+ nums. sort ( ) ;
30
+
31
+ let mid = nums[ nums. len ( ) / 2 ] as i64 ;
32
+
33
+ let i = unsafe {
34
+ match PS . binary_search ( & mid) {
35
+ Ok ( i) => i,
36
+ Err ( i) => i,
37
+ }
38
+ } ;
39
+
40
+ let f = |x : i64 | -> i64 { nums. iter ( ) . map ( |& v| ( v as i64 - x) . abs ( ) ) . sum ( ) } ;
41
+
42
+ let mut ans = i64:: MAX ;
43
+
44
+ for j in i. saturating_sub ( 1 ) ..=( i + 1 ) . min ( 2 * 100_000 - 1 ) {
45
+ let x = unsafe { PS [ j] } ;
46
+ ans = min ( ans, f ( x) ) ;
47
+ }
48
+
49
+ ans
50
+ }
51
+ }
You can’t perform that action at this time.
0 commit comments