不是很理解这个,再看看
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 给定数组的最长严格上升子序列的长度。
* @param arr int整型vector 给定的数组
* @return int整型
*/
int LIS(vector<int>& arr) {
if (arr.empty()) {
return 0;
}
// dp[i] 表示到下标i结尾(包括元素i)的字符串的最长严格上升子序列长度
int res = 0;
std::vector<int> dp(arr.size(), 1);
// 划分子数组
// 将数组划分子数组,有利于子问题分析
// 找出每一个子数组中对应每个下标结尾最大的上升子序列,后面数组扩张在这基础上增加
// 找出每个子数组中的最长上升子序列,各个子数组中的最长上升子序列再去比较
for (int i = 1; i < arr.size(); ++i) {
for (int j = 0; j < i; ++j) {
if (arr[j] < arr[i]) {
dp[i] = std::max(dp[i], dp[j] + 1);
res = std::max(res, dp[i]);
}
}
}
return res;
}
};