@@ -9,31 +9,31 @@ constexpr int INF = 0x3f3f3f3f;
9
9
class Solution {
10
10
public:
11
11
int makeArrayIncreasing (vector<int > &arr1, vector<int > &arr2) {
12
- sort (arr2.begin (), arr2.end ());
13
- arr2.erase (unique (arr2.begin (), arr2.end ()), arr2.end ());
12
+ sort (arr2.begin (), arr2.end ()); // 对 arr2 排序
13
+ arr2.erase (unique (arr2.begin (), arr2.end ()), arr2.end ()); // 去重
14
14
int n = arr1.size ();
15
15
int m = arr2.size ();
16
- vector<vector<int >> dp (n + 1 , vector<int >(min (m, n) + 1 , INF));
17
- dp[0 ][0 ] = -1 ;
16
+ vector<vector<int >> dp (n + 1 , vector<int >(min (m, n) + 1 , INF)); // 定义状态数组
17
+ dp[0 ][0 ] = -1 ; // 初始化
18
18
for (int i = 1 ; i <= n; i++) {
19
19
for (int j = 0 ; j <= min (i, m); j++) {
20
20
/* 如果当前元素大于序列的最后一个元素 */
21
21
if (arr1[i - 1 ] > dp[i - 1 ][j]) {
22
- dp[i][j] = arr1[i - 1 ];
22
+ dp[i][j] = arr1[i - 1 ]; // 直接将当前元素加入序列
23
23
}
24
24
if (j > 0 && dp[i - 1 ][j - 1 ] != INF) {
25
25
/* 查找严格大于 dp[i - 1][j - 1] 的最小元素 */
26
26
auto it =
27
27
upper_bound (arr2.begin () + j - 1 , arr2.end (), dp[i - 1 ][j - 1 ]);
28
28
if (it != arr2.end ()) {
29
- dp[i][j] = min (dp[i][j], *it);
29
+ dp[i][j] = min (dp[i][j], *it); // 将找到的元素加入序列
30
30
}
31
31
}
32
32
if (i == n && dp[i][j] != INF) {
33
- return j;
33
+ return j; // 返回最小的可以使数组严格递增的操作次数
34
34
}
35
35
}
36
36
}
37
- return -1 ;
37
+ return -1 ; // 无法使数组严格递增
38
38
}
39
39
};
0 commit comments