Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit e1a42d6

Browse files
authoredSep 26, 2019
Create 1187-make-array-strictly-increasing.js
1 parent ac6bf73 commit e1a42d6

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed
 
+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/**
2+
* @param {number[]} arr1
3+
* @param {number[]} arr2
4+
* @return {number}
5+
*/
6+
const makeArrayIncreasing = function(arr1, arr2) {
7+
arr2.sort((a, b) => a - b)
8+
let arr3 = [arr2[0]]
9+
for (let i = 1; i < arr2.length; i++) {
10+
if (arr2[i] > arr2[i - 1]) {
11+
arr3.push(arr2[i])
12+
}
13+
}
14+
arr2 = arr3
15+
let n = arr1.length
16+
let indexMap = new Array(n * 2 + 2)
17+
for (let i = 0; i < n; i++) {
18+
let ai = arr1[i]
19+
let li = findLarger(arr2, ai)
20+
indexMap[i * 2] = li
21+
indexMap[i * 2 + 1] = arr2[li - 1] === ai ? li - 2 : li - 1
22+
}
23+
indexMap[n * 2] = arr2.length
24+
indexMap[n * 2 + 1] = arr2.length - 1
25+
let dp = new Array(n + 1)
26+
let MaxNum = 1000000000 + 1
27+
dp[0] = 0
28+
for (let i = 1; i < n + 1; i++) {
29+
let min = i
30+
let ai = i === n ? MaxNum : arr1[i]
31+
for (let j = 0; j < i; j++) {
32+
if (dp[j] == -1 || ai <= arr1[j]) {
33+
continue
34+
}
35+
if (indexMap[i * 2 + 1] - indexMap[j * 2] + 1 < i - j - 1) continue
36+
min = Math.min(min, dp[j] + i - j - 1)
37+
}
38+
if (min === i) {
39+
if (indexMap[i * 2 + 1] + 1 < i) {
40+
min = -1
41+
}
42+
}
43+
dp[i] = min
44+
}
45+
return dp[n]
46+
}
47+
const findLarger = function(arr, a) {
48+
if (a > arr[arr.length - 1]) return arr.length
49+
let l = 0
50+
let r = arr.length - 1
51+
while (l < r) {
52+
let mid = (l + r) >> 1
53+
if (arr[mid] <= a) {
54+
l = mid + 1
55+
} else {
56+
r = mid
57+
}
58+
}
59+
return l
60+
}

0 commit comments

Comments
 (0)
Please sign in to comment.