leetcode300 最长上升子序列

举报
兔老大 发表于 2021/04/21 23:42:41 2021/04/21
【摘要】 经典题,不解释,可以看我之前文章。 普通dp public class Solution { public int lengthOfLIS(int[] nums) { if (nums.length == 0) { return 0; } int[] dp = new int[nums.length]; dp[0] = 1; int maxans = 1; for (in...

经典题,不解释,可以看我之前文章。

普通dp


  
  1. public class Solution {
  2. public int lengthOfLIS(int[] nums) {
  3. if (nums.length == 0) {
  4. return 0;
  5. }
  6. int[] dp = new int[nums.length];
  7. dp[0] = 1;
  8. int maxans = 1;
  9. for (int i = 1; i < dp.length; i++) {
  10. int maxval = 0;
  11. for (int j = 0; j < i; j++) {
  12. if (nums[i] > nums[j]) {
  13. maxval = Math.max(maxval, dp[j]);
  14. }
  15. }
  16. dp[i] = maxval + 1;
  17. maxans = Math.max(maxans, dp[i]);
  18. }
  19. return maxans;
  20. }
  21. }

 

二分dp


  
  1. public class Solution {
  2. public int lengthOfLIS(int[] nums) {
  3. int[] dp = new int[nums.length];
  4. int len = 0;
  5. for (int num : nums) {
  6. int i = Arrays.binarySearch(dp, 0, len, num);
  7. if (i < 0) {
  8. i = -(i + 1);
  9. }
  10. dp[i] = num;
  11. if (i == len) {
  12. len++;
  13. }
  14. }
  15. return len;
  16. }
  17. }

文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。

原文链接:fantianzuo.blog.csdn.net/article/details/103246161

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。