Leetcode 300 最长递增子序列

题意理解:

        给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

        子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

        

        这里的子序列:不连续的递增子序列,不要求连续,所以无法通过相邻比较解题

        我们使用动态规划的思路进行解题,计算到每个位置,所含的最长子序列长度

解题思路:

        (1)定义一维dp数组

        dp[i]表示nums[i]为结尾,所获得的最长子序列长度

        (2)初始化

        每个位置dp[i]=1,最长一个元素

        (3)递推公式

        dp[i]=max(dp[j]+1,dp[i])   j

         (4)遍历顺序

        for(int i=1;i

                for(int j=0;j

1.解题

public int lengthOfLIS(int[] nums) {
        int[] dp=new int[nums.length];
        Arrays.fill(dp,1);
        for(int i=1;i

2.分析

时间复杂度:O(n^2)

空间复杂度:O(n)

你可能感兴趣的:(刷题训练营,leetcode,算法,数据结构)