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 {
308308}
309309```
310310
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+
311369<!-- tabs: end -->
312370
313371<!-- solution: end -->
Original file line number Diff line number Diff line change @@ -306,6 +306,64 @@ function minimumCost(nums: number[]): number {
306306}
307307```
308308
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+
309367<!-- tabs: end -->
310368
311369<!-- 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