674. 最长连续递增序列
✅做题思路or感想
暴力解法
“连续”,“递增”要素过多,一眼暴力
class Solution {
public:
int findLengthOfLCIS(vector<int>& nums) {
int result = 1, sum = 1;
for (int i = 1; i < nums.size(); i++) {
//递增,则当前记录 + 1
if (nums[i] > nums[i - 1]) {
sum++;
} else { //如果不递增了,则重置当前记录,更新最长长度的记录
result = max(result, sum);
sum = 1;
}
}
result = max(result, sum);
return result;
}
};
动态规划
dp数组含义
dp[i]
,以nums[i]
结尾的最长连续递增子序列的长度
推导公式
当 nums[i] > nums[j]
时: nums[i]
可以接在nums[j]
之后(此题要求严格递增),此情况下最长上升子序列长度为dp[j] + 1
;
if (nums[i] > nums[j]) {
dp[i] = dp[i - 1] + 1;
}
初始化
因为最少的子序列的长度为1,所以一律初始化为1就好了
遍历顺序
从小推大,所以是正序
class Solution {
public:
int findLengthOfLCIS(vector<int>& nums) {
vector<int>dp (nums.size(), 1);
//result来记录最大的长度
int result = 1;
for (int i = 1; i < nums.size(); i++) {
if (nums[i] > nums[i - 1]) {
dp[i] = dp[i - 1] + 1;
result = max(result, dp[i]);
}
}
return result;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端