前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >最长上升子序列

最长上升子序列

作者头像
一份执着✘
发布2018-06-04 16:40:15
3910
发布2018-06-04 16:40:15
举报
文章被收录于专栏:赵俊的Java专栏赵俊的Java专栏

题意

给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。

最长上升子序列问题是在一个无序的给定序列中找到一个尽可能长的由低到高排列的子序列,这种子序列不一定是连续的或者唯一的。

样例

给出 [5,4,1,2,3],LIS 是 [1,2,3],返回 3 给出 [4,2,4,5,3,7],LIS 是 [2,4,5,7],返回 4

思路

1, 3, 5, 2, 8, 4, 6,对于 6 来说,它的 LIS 是它的前一个数,也就是 4 小于它(4 < 6)的情况下,将 4 的(LIS + 1)就是 6 个 LIS,以此类推。

代码实现

代码语言:javascript
复制
public class Solution {
    /**
     * @param nums: The integer array
     * @return: The length of LIS (longest increasing subsequence)
     */
    public int longestIncreasingSubsequence(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }
        
        int[] lis = new int[nums.length];
        int max = 0;
        for (int i = 0; i < nums.length; i++) {
            int tempMax = 0;
            for (int j = 0; j < i; j++) {
                if (lis[j] > tempMax && nums[j] < nums[i])
                    tempMax = lis[j];
            }
            
            lis[i] = tempMax + 1;
            
            max = lis[i] > max ? lis[i] : max;
        }
        return max;
    }
}

原题地址

LintCode:最长上升子序列

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-08-092,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题意
  • 样例
  • 思路
  • 代码实现
  • 原题地址
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档