资讯专栏INFORMATION COLUMN

【Code皮皮虾】求最长递增子序列的个数 不是长度哦(手动滑稽)!!!

chunquedong / 1959人阅读

摘要:文章目录毛遂自荐题目题外话正经点,解题思路代码实现最后皮皮虾一个沙雕而又有趣的憨憨少年,和大多数小伙伴们一样喜欢听歌游戏,当然除此之外还有写作的兴趣,,日子还很长,让我们一起加油努力叭话不多说,直达底部有粉丝专享福利毛

Code皮皮虾 一个沙雕而又有趣的憨憨少年,和大多数小伙伴们一样喜欢听歌、游戏,当然除此之外还有写作的兴趣,emm…,日子还很长,让我们一起加油努力叭?

?话不多说,直达底部有粉丝专享福利!!!


?毛遂自荐

毛遂自荐一下,给大家推荐一下自己的专栏?,欢迎小伙伴们收藏关注?

大厂面试题专栏

Java专栏

爬虫专栏

力扣刷题专栏

更多专栏尽在主页,点我?!!!



✨题目

673. 最长递增子序列的个数



?题外话

本题是求最长递增子序列的个数,而不是最长递增子序列的长度,不会有小伙伴上来就给我摆出下面这个代码的叭!不会吧不会吧( ̄▽ ̄)


别问我是怎么知道的(手动滑稽)

300.最长子序列

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爬虫、力扣题解、大厂面试题 四大系列,更有长时间总结的干货资源分享,后台回复:面试资料即可领取


最后,祝各位步步高升???

                                                   粉丝福利??????

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/120979.html

相关文章

  • 【算法】算法测试题5:牛牛数列:最长连续序列

    摘要:题目描述链接来源牛客网牛牛现在有一个个数组成的数列牛牛现在想取一个连续的子序列并且这个子序列还必须得满足最多只改变一个数就可以使得这个连续的子序列是一个严格上升的子序列牛牛想知道这个连续子序列最长的长度是多少。 题目描述 链接:https://www.nowcoder.com/ques...来源:牛客网 牛牛现在有一个n个数组成的数列,牛牛现在想取一个连续的子序列,并且这个子序列还必须...

    MRZYD 评论0 收藏0
  • [算法总结] 搞定 BAT 面试——几道常见符串算法题

    摘要:第一种方法常规方法。如果不存在公共前缀,返回空字符串。注意假设字符串的长度不会超过。说明本题中,我们将空字符串定义为有效的回文串。示例输入输出一个可能的最长回文子序列为。数值为或者字符串不是一个合法的数值则返回。 说明 本文作者:wwwxmu 原文地址:https://www.weiweiblog.cn/13s... 作者的博客站点:https://www.weiweiblog.c...

    chanjarster 评论0 收藏0
  • 【微信小程序爬虫】表情包小程序图文视频教学,从零写起,保姆教程!!!

    摘要:文章目录前言爬取分析视频教学成果展示福利入门到就业学习路线规划小白快速入门爬虫路线前言皮皮虾一个沙雕而又有趣的憨憨少年,和大多数小伙伴们一样喜欢听歌游戏,当然除此之外还有写作的兴趣,,日子还很长,让我们一起加油努力叭话 ...

    coordinate35 评论0 收藏0
  • leetcode-300-Longest Increasing Subsequence

    摘要:本质找出最长的递增子序列的长度,可以是不连续的。应用判断满足一定条件的子序列的最大长度,用动态数组加以处理。二分法确定满足条件的位置。类似二分法查找元素,查找某种情况的子序列。 本质: 找出最长的递增子序列的长度,可以是不连续的。 用一个数组存储 递增子序列,遍历原始数组,每增加一个数,往里添加到对应的顺序,记录他的位置,即为此数组的长度。 成立的理由:每一个数添加以后,都有对...

    amc 评论0 收藏0
  • Python爬虫120例之案例58,手机APP爬虫,“武器库”准备and皮皮APP测试

    摘要:在爬虫的编写过程中使用最多的是,它表示查看请求和响应的数据内容。后续在打开刚才加载的软件,例如本次案例打开的是皮皮虾,开启,成功捕获到如下请求,这个地方就是最终的接口了。复制接口地址,在本地浏览器打开,得到皮皮虾的视频评论数据。 ...

    roundstones 评论0 收藏0

发表评论

0条评论

chunquedong

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<