300. 最长递增子序列(leetcode)

https://leetcode.cn/problems/longest-increasing-subsequence/description/

class Solution {
    public int lengthOfLIS(int[] nums) {
        // f[i]表示以第i个数为结尾的最长严格上升子序列
        // 以倒数第二个数是多少来划分子集
        // f[i] = max(f[i-1],f[i-2],...f[1])+1;
        // f[1]=1;
        if(nums.length==1)return 1;
        int[] f=new int[nums.length+1];
        f[1]=1;
        int res=0;
        for(int i=2;i<=nums.length;i++)
        {
            int max=0;
            for(int j=1;j<=i-1;j++) 
                if(nums[j-1]<nums[i-1]) // 这里nums和f下标差一位,需要偏移
                    max=Math.max(f[j],max);
            f[i]=max+1;
            res=Math.max(res,f[i]);
        }
        return res;
    }
}

 

posted @ 2024-09-07 14:04  风乐  阅读(6)  评论(0)    收藏  举报