@@ -9,31 +9,31 @@ constexpr int INF = 0x3f3f3f3f;
99class Solution {
1010public:
1111 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 ()); // 去重
1414 int n = arr1.size ();
1515 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 ; // 初始化
1818 for (int i = 1 ; i <= n; i++) {
1919 for (int j = 0 ; j <= min (i, m); j++) {
2020 /* 如果当前元素大于序列的最后一个元素 */
2121 if (arr1[i - 1 ] > dp[i - 1 ][j]) {
22- dp[i][j] = arr1[i - 1 ];
22+ dp[i][j] = arr1[i - 1 ]; // 直接将当前元素加入序列
2323 }
2424 if (j > 0 && dp[i - 1 ][j - 1 ] != INF) {
2525 /* 查找严格大于 dp[i - 1][j - 1] 的最小元素 */
2626 auto it =
2727 upper_bound (arr2.begin () + j - 1 , arr2.end (), dp[i - 1 ][j - 1 ]);
2828 if (it != arr2.end ()) {
29- dp[i][j] = min (dp[i][j], *it);
29+ dp[i][j] = min (dp[i][j], *it); // 将找到的元素加入序列
3030 }
3131 }
3232 if (i == n && dp[i][j] != INF) {
33- return j;
33+ return j; // 返回最小的可以使数组严格递增的操作次数
3434 }
3535 }
3636 }
37- return -1 ;
37+ return -1 ; // 无法使数组严格递增
3838 }
3939};
0 commit comments