美文网首页
最长上升子序列

最长上升子序列

作者: 二进制的二哈 | 来源:发表于2019-12-27 22:43 被阅读0次

    题目来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/longest-increasing-subsequence

    给定一个无序的整数数组,找到其中最长上升子序列的长度。

    示例:

    输入: [10,9,2,5,3,7,101,18]
    输出: 4 
    解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
    

    说明:

    • 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。
    • 你算法的时间复杂度应该为 O(n2) 。

    进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?

    动态规划解法(时间复杂度O(n2)):

    class Solution {
        public int lengthOfLIS(int[] nums) {
            if(nums.length == 0)
                return 0;
            int[] dp = new int[nums.length];
            dp[0] = 1;
            int ans = 1;
            for(int i=1;i<nums.length;i++){
                int maxVal = 0;
                for(int j=0;j<i;j++){
                    if(nums[j] < nums[i]){
                        maxVal = Math.max(maxVal,dp[j]);
                    }
                }
                dp[i] = maxVal + 1;
                ans = Math.max(ans,dp[i]);
            }
            return ans;
        }
    }
    

    相关文章

      网友评论

          本文标题:最长上升子序列

          本文链接:https://www.haomeiwen.com/subject/upjjoctx.html