今天事情多又是开会又是讨论的,只做了一道最长递增子序列,leetcode300
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
int n = (int)nums.size();
if (n == 0) {
return 0;
}
vector<int> dp(n, 0);
for (int i = 0; i < n; ++i) {
dp[i] = 1;
for (int j = 0; j < i; ++j) {
if (nums[j] < nums[i]) {
dp[i] = max(dp[i], dp[j] + 1);
}
}
}
return *max_element(dp.begin(), dp.end());
}
};
vector可以用fill对容器进行填满,在动态规划里我感觉今天这个题算简单点的,有点一维的意思,只需要在第二层遍历的过程中比有没有比当前大的并存入dp中就行,dp初始值是1因为自己都是自己的最长公共子序列。状态转移方程是:
dp[i] = max(dp[i], dp[j] + 1)
因为我们在第二次遍历中可能发现的不是最长的,所以需要比较取较大值。
最后返回的:
return *max_element(dp.begin(), dp.end());
也学到了,max_element,自己是迭代器?
|