File tree Expand file tree Collapse file tree 3 files changed +148
-0
lines changed
solution/1100-1199/1187.Make Array Strictly Increasing Expand file tree Collapse file tree 3 files changed +148
-0
lines changed Original file line number Diff line number Diff line change @@ -264,6 +264,57 @@ function makeArrayIncreasing(arr1: number[], arr2: number[]): number {
264
264
}
265
265
```
266
266
267
+ ### ** C#**
268
+
269
+ ``` cs
270
+ public class Solution {
271
+ public int MakeArrayIncreasing (int [] arr1 , int [] arr2 ) {
272
+ Array .Sort (arr2 );
273
+ int m = 0 ;
274
+ foreach (int x in arr2 ) {
275
+ if (m == 0 || x != arr2 [m - 1 ]) {
276
+ arr2 [m ++ ] = x ;
277
+ }
278
+ }
279
+ int inf = 1 << 30 ;
280
+ int [] arr = new int [arr1 .Length + 2 ];
281
+ arr [0 ] = - inf ;
282
+ arr [arr .Length - 1 ] = inf ;
283
+ for (int i = 0 ; i < arr1 .Length ; ++ i ) {
284
+ arr [i + 1 ] = arr1 [i ];
285
+ }
286
+ int [] f = new int [arr .Length ];
287
+ Array .Fill (f , inf );
288
+ f [0 ] = 0 ;
289
+ for (int i = 1 ; i < arr .Length ; ++ i ) {
290
+ if (arr [i - 1 ] < arr [i ]) {
291
+ f [i ] = f [i - 1 ];
292
+ }
293
+ int j = search (arr2 , arr [i ], m );
294
+ for (int k = 1 ; k <= Math .Min (i - 1 , j ); ++ k ) {
295
+ if (arr [i - k - 1 ] < arr2 [j - k ]) {
296
+ f [i ] = Math .Min (f [i ], f [i - k - 1 ] + k );
297
+ }
298
+ }
299
+ }
300
+ return f [arr .Length - 1 ] >= inf ? - 1 : f [arr .Length - 1 ];
301
+ }
302
+
303
+ private int search (int [] nums , int x , int n ) {
304
+ int l = 0 , r = n ;
305
+ while (l < r ) {
306
+ int mid = (l + r ) >> 1 ;
307
+ if (nums [mid ] >= x ) {
308
+ r = mid ;
309
+ } else {
310
+ l = mid + 1 ;
311
+ }
312
+ }
313
+ return l ;
314
+ }
315
+ }
316
+ ```
317
+
267
318
### ** ...**
268
319
269
320
```
Original file line number Diff line number Diff line change @@ -258,6 +258,57 @@ function makeArrayIncreasing(arr1: number[], arr2: number[]): number {
258
258
}
259
259
```
260
260
261
+ ### ** C#**
262
+
263
+ ``` cs
264
+ public class Solution {
265
+ public int MakeArrayIncreasing (int [] arr1 , int [] arr2 ) {
266
+ Array .Sort (arr2 );
267
+ int m = 0 ;
268
+ foreach (int x in arr2 ) {
269
+ if (m == 0 || x != arr2 [m - 1 ]) {
270
+ arr2 [m ++ ] = x ;
271
+ }
272
+ }
273
+ int inf = 1 << 30 ;
274
+ int [] arr = new int [arr1 .Length + 2 ];
275
+ arr [0 ] = - inf ;
276
+ arr [arr .Length - 1 ] = inf ;
277
+ for (int i = 0 ; i < arr1 .Length ; ++ i ) {
278
+ arr [i + 1 ] = arr1 [i ];
279
+ }
280
+ int [] f = new int [arr .Length ];
281
+ Array .Fill (f , inf );
282
+ f [0 ] = 0 ;
283
+ for (int i = 1 ; i < arr .Length ; ++ i ) {
284
+ if (arr [i - 1 ] < arr [i ]) {
285
+ f [i ] = f [i - 1 ];
286
+ }
287
+ int j = search (arr2 , arr [i ], m );
288
+ for (int k = 1 ; k <= Math .Min (i - 1 , j ); ++ k ) {
289
+ if (arr [i - k - 1 ] < arr2 [j - k ]) {
290
+ f [i ] = Math .Min (f [i ], f [i - k - 1 ] + k );
291
+ }
292
+ }
293
+ }
294
+ return f [arr .Length - 1 ] >= inf ? - 1 : f [arr .Length - 1 ];
295
+ }
296
+
297
+ private int search (int [] nums , int x , int n ) {
298
+ int l = 0 , r = n ;
299
+ while (l < r ) {
300
+ int mid = (l + r ) >> 1 ;
301
+ if (nums [mid ] >= x ) {
302
+ r = mid ;
303
+ } else {
304
+ l = mid + 1 ;
305
+ }
306
+ }
307
+ return l ;
308
+ }
309
+ }
310
+ ```
311
+
261
312
### ** ...**
262
313
263
314
```
Original file line number Diff line number Diff line change
1
+ public class Solution {
2
+ public int MakeArrayIncreasing ( int [ ] arr1 , int [ ] arr2 ) {
3
+ Array . Sort ( arr2 ) ;
4
+ int m = 0 ;
5
+ foreach ( int x in arr2 ) {
6
+ if ( m == 0 || x != arr2 [ m - 1 ] ) {
7
+ arr2 [ m ++ ] = x ;
8
+ }
9
+ }
10
+ int inf = 1 << 30 ;
11
+ int [ ] arr = new int [ arr1 . Length + 2 ] ;
12
+ arr [ 0 ] = - inf ;
13
+ arr [ arr . Length - 1 ] = inf ;
14
+ for ( int i = 0 ; i < arr1 . Length ; ++ i ) {
15
+ arr [ i + 1 ] = arr1 [ i ] ;
16
+ }
17
+ int [ ] f = new int [ arr . Length ] ;
18
+ Array . Fill ( f , inf ) ;
19
+ f [ 0 ] = 0 ;
20
+ for ( int i = 1 ; i < arr . Length ; ++ i ) {
21
+ if ( arr [ i - 1 ] < arr [ i ] ) {
22
+ f [ i ] = f [ i - 1 ] ;
23
+ }
24
+ int j = search ( arr2 , arr [ i ] , m ) ;
25
+ for ( int k = 1 ; k <= Math . Min ( i - 1 , j ) ; ++ k ) {
26
+ if ( arr [ i - k - 1 ] < arr2 [ j - k ] ) {
27
+ f [ i ] = Math . Min ( f [ i ] , f [ i - k - 1 ] + k ) ;
28
+ }
29
+ }
30
+ }
31
+ return f [ arr . Length - 1 ] >= inf ? - 1 : f [ arr . Length - 1 ] ;
32
+ }
33
+
34
+ private int search ( int [ ] nums , int x , int n ) {
35
+ int l = 0 , r = n ;
36
+ while ( l < r ) {
37
+ int mid = ( l + r ) >> 1 ;
38
+ if ( nums [ mid ] >= x ) {
39
+ r = mid ;
40
+ } else {
41
+ l = mid + 1 ;
42
+ }
43
+ }
44
+ return l ;
45
+ }
46
+ }
You can’t perform that action at this time.
0 commit comments