一:题目
二:上码
1:方法一贪心
class Solution {
public:
/**
思路:1.贪心
**/
int findLengthOfLCIS(vector<int>& nums) {
int ans = 1;
int count = 1;
for (int i = 1; i < nums.size(); i++) {
if(nums[i] > nums[i-1]) {
count++;
}else{
count = 1;//出现不连续的状态
}
if(count > ans) ans = count;
}
return ans;
}
};
2:方法二
class Solution {
public:
/**
思路:1.动态规划
1>:确定dp数组以及下标的含义
dp[j] 表示的是j之前且包括j的最长连续序列
2>:确定dp数组的递推公式
if(nums[j] > nums[j-1]) dp[j] = dp[j-1] + 1;
if(nums[j] < nums[j-1]) dp[j] = 1;//这步也可以不写 反正 只要出现反例的话 我们就跳过了
//那么再遇见增长的 其前面因为是跳过的所以其值为1
3>:确定dp数组的初始化
初始化为1
4>:确定dp数组的遍历顺序
从前往后 j需要j-1
5>:举例验证
1 3 5 4 7
0 1 2 3 4
初始化 1 1 1 1 1
i=1 1 2 3 1 2
**/
int findLengthOfLCIS(vector<int>& nums) {
vector<int>dp(nums.size(),1);
for (int j = 1; j < nums.size(); j++) {
if (nums[j] > nums[j-1]) dp[j] = dp[j-1] + 1;
if (nums[j] < nums[j-1]) dp[j] = 1;
}
int ans = 0;
for (auto nums:dp) {
ans = max(nums,ans);
}
return ans;
}
};