File tree Expand file tree Collapse file tree 1 file changed +21
-29
lines changed Expand file tree Collapse file tree 1 file changed +21
-29
lines changed Original file line number Diff line number Diff line change 4
4
* @return {string }
5
5
*/
6
6
const minInteger = function ( num , k ) {
7
- const nums = num . split ( "" )
8
- const map = { }
9
- nums . forEach ( ( n , i ) => {
10
- map [ n ] = map [ n ] || [ ]
11
- map [ n ] . push ( i )
12
- } )
13
-
14
- const used = new Set ( )
7
+ const nums = num . split ( '' )
8
+ const len = nums . length
9
+ const q = Array ( 10 )
10
+ . fill ( null )
11
+ . map ( ( ) => [ ] )
12
+ nums . forEach ( ( n , i ) => q [ + n ] . push ( i ) )
15
13
const tree = new Fenwick ( nums . length )
16
- let idx = 0
17
- let re = ""
18
- while ( k > 0 && idx < nums . length ) {
19
- for ( let i = 0 ; i < 10 ; i ++ ) {
20
- if ( ! map [ i ] || ! map [ i ] . length ) continue
21
- const id = map [ i ] [ 0 ]
22
- const cost = id - tree . query ( id )
23
- if ( k < cost ) continue
24
- re += nums [ id ]
25
- k -= cost
26
- used . add ( id )
27
- tree . update ( id + 1 , 1 )
28
- map [ i ] . shift ( )
29
- break
30
- }
31
- idx ++
32
- }
33
-
34
- for ( let i = 0 ; i < nums . length ; i ++ ) {
35
- if ( ! used . has ( i ) ) {
36
- re += nums [ i ]
14
+ for ( let i = 1 ; i <= len ; i ++ ) tree . update ( i , 1 )
15
+ let re = ''
16
+ for ( let i = 0 ; i < len ; i ++ ) {
17
+ for ( let j = 0 ; j <= 9 ; j ++ ) {
18
+ const idxArr = q [ j ]
19
+ if ( idxArr && idxArr . length ) {
20
+ const idx = idxArr [ 0 ]
21
+ const num = tree . query ( idx )
22
+ if ( num > k ) continue
23
+ k -= num
24
+ idxArr . shift ( )
25
+ tree . update ( idx + 1 , - 1 )
26
+ re += j
27
+ break
28
+ }
37
29
}
38
30
}
39
31
You can’t perform that action at this time.
0 commit comments