本题是求最长递增子序列的个数,而不是最长递增子序列的长度,不会有小伙伴上来就给我摆出下面这个代码的叭!不会吧不会吧( ̄▽ ̄)
别问我是怎么知道的(手动滑稽)
class Solution {
public int lengthOfLIS(int[] nums) {
int[] dp = new int[nums.length];
for(int i = 0;i < nums.length;i++) {
dp[i] = 1;
}
int res = 1;
for(int i = 1;i < nums.length;i++) {
for(int j = 0;j < i;j++) {
if(nums[j] < nums[i]) {
dp[i] = Math.max(dp[i],dp[j] + 1);
}
}
res = Math.max(res,dp[i]);
}
return res;
}
}
😉正经点,解题思路
本题要的是,最长递增子序列的个数,那么我们得知道最长是多少,才能再去求最长得序列个数是多少!
利用动态规划,设置int[] dp = new int[nums.length];数组记录长度
,设置int[] counts = new int[nums.length];记录个数
那么状态如何转移呢❔
如果有熟悉 300.最长子序列的小伙伴可能知道,我也不废话
因为要递增,所以⏬
当j < i && nums[j] < nums[i]的时候,就需要去判断当前 dp[j] + 1 > dp[i],
如果为true,说明:dp[j]是不能接在dp[i]前面,递增序列有更大的长度,那么需要更新长度,既然有更大的长度,那么 counts[i] = counts[j],因为count[i]所以记录的个数已经无效了
但如果dp[j] + 1 == dp[i],说明dp[j]是可以接在dp[i]前面的,所以要 counts[i] += counts[j];
🌈代码实现
class Solution {
public int findNumberOfLIS(int[] nums) {
int len = nums.length;
if (len <= 1) return len;
int[] dp = new int[len];
int[] counts = new int[len];
//至少长度为1
Arrays.fill(counts, 1);
int maxLen = 0;
for (int i = 0; i < len; i++) {
for (int j = 0; j < i; j++) {
if (nums[j] < nums[i]) {
if (dp[j] + 1 > dp[i]) {
dp[i] = dp[j] + 1;
counts[i] = counts[j];
}else if (dp[j] + 1 == dp[i]) {
counts[i] += counts[j];
}
}
}
maxLen = Math.max(maxLen,dp[i]);
}
//通过比较maxLen,来进行个数的增加
int res = 0;
for (int i = 0; i < len; ++i) {
if (dp[i] == maxLen) {
res += counts[i];
}
}
return res;
}
}
💖最后
我是 Code皮皮虾,一个热爱分享知识的 皮皮虾爱好者,未来的日子里会不断更新出对大家有益的博文,期待大家的关注!!!
创作不易,如果这篇博文对各位有帮助,希望各位小伙伴可以一键三连哦!,感谢支持,我们下次再见~~~
公众号干货内容输出,囊括Java、Python爬虫、力扣题解、大厂面试题 四大系列,更有长时间总结的干货资源分享,后台回复:面试资料即可领取
最后,祝各位步步高升🚀🚀🚀
粉丝福利👇🏻👇🏻👇🏻
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数同学面临毕业设计项目选题时,很多人都会感到无从下手,尤其是对于计算机专业的学生来说,选择一个合适的题目尤为重要。因为毕业设计不仅是我们在大学四年学习的一个总结,更是展示自己能力的重要机会。
因此收集整理了一份《2024年计算机毕业设计项目大全》,初衷也很简单,就是希望能够帮助提高效率,同时减轻大家的负担。
既有Java、Web、PHP、也有C、小程序、Python等项目供你选择,真正体系化!
由于项目比较多,这里只是将部分目录截图出来,每个节点里面都包含素材文档、项目源码、讲解视频
如果你觉得这些内容对你有帮助,可以添加VX:vip1024c (备注项目大全获取)
b、PHP、也有C、小程序、Python等项目供你选择,真正体系化!**
由于项目比较多,这里只是将部分目录截图出来,每个节点里面都包含素材文档、项目源码、讲解视频
如果你觉得这些内容对你有帮助,可以添加VX:vip1024c (备注项目大全获取)
[外链图片转存中…(img-JAVppueA-1712542145353)]