Skip to content

Commit 96c61ee

Browse files
committed
feat: add solutions to lc problem: No.1187
No.1187.Make Array Strictly Increasing
1 parent 366254d commit 96c61ee

File tree

3 files changed

+148
-0
lines changed

3 files changed

+148
-0
lines changed

solution/1100-1199/1187.Make Array Strictly Increasing/README.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,57 @@ function makeArrayIncreasing(arr1: number[], arr2: number[]): number {
264264
}
265265
```
266266

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+
267318
### **...**
268319

269320
```

solution/1100-1199/1187.Make Array Strictly Increasing/README_EN.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,57 @@ function makeArrayIncreasing(arr1: number[], arr2: number[]): number {
258258
}
259259
```
260260

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+
261312
### **...**
262313

263314
```
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
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+
}

0 commit comments

Comments
 (0)