yinums[i] 为结尾的所有子数组中的 等差数列数组最多的个数
根据最后一个元素的构成
都初始化为 0
⇒ 1. 等差数列数组要三个元素及以上, dp[0] = dp[1] = 0; 2. 少考虑两种状态从前往后
累加dp表
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& nums)
{
int n = nums.size();
// 建表 + 初始化
vector<int> dp(n);
int res = 0;
for(int i = 2; i < n; i++)
{
if(nums[i-1] * 2 == nums[i] + nums[i-2])
dp[i] = dp[i-1] + 1;
res += dp[i];
}
return res;
}
};
以nums[i] 为结尾的 所有子序列中 最长递增子序列的长度
根据最后一个元素的构成
全都初始化为 1
从前往后
dp表中的最大值
class Solution {
public:
int lengthOfLIS(vector<int>& nums)
{
int n = nums.size();
// 建表 + 初始化
vector<int> dp(n, 1);
int res = 1;
for(int i = 1; i < n; i++)
{
for(int j = 0; j < i; j++)
{
if(nums[i] > nums[j])
dp[i] = max(dp[i], dp[j] + 1);
}
res = max(res, dp[i]);
}
return res;
}
};
仰望星空, 脚踏实地!