day105(3.6)——leetcode面试经典150

300. 最长递增子序列

300. 最长递增子序列

今天坐了一天车,终于到学校了,太不容易了,然后一直坐车也没来得及吃饭,回来了就大吃特吃,结果吃撑了,十一点多才忙完,加油!!!明天收拾完东西就出发学习!!!

题目:

题解:

java 复制代码
class Solution {
    public int lengthOfLIS(int[] nums) {
        int n = nums.length;
        //dp数组表示到第k位是最多能有几个递增序列数
        int[] dp = new int[n];
        //最大序列可能不是以最后一个数结尾
        int maxx = 0;
        for(int i=0;i<n;i++) {
            dp[i]=Math.max(1, dp[i]);
            for(int j=0;j<i;j++) {
                if(nums[i]>nums[j]) {
                    dp[i]=Math.max(dp[j]+1, dp[i]);
                }
            }
            maxx = Math.max(maxx, dp[i]);
        }
        return maxx;
    }
}

虽然这不是最优解,最优解是动态规划+二分:

java 复制代码
// Dynamic programming + Dichotomy.
class Solution {
    public int lengthOfLIS(int[] nums) {
        int[] tails = new int[nums.length];
        int res = 0;
        for(int num : nums) {
            int i = 0, j = res;
            while(i < j) {
                int m = (i + j) / 2;
                if(tails[m] < num) i = m + 1;
                else j = m;
            }
            tails[i] = num;
            if(res == j) res++;
        }
        return res;
    }
}
相关推荐
葫芦和十三11 小时前
图解 MongoDB 18|复制集拓扑:Primary、Secondary 和 Arbiter 的分工
后端·mongodb·面试
To_OC14 小时前
LC 994 腐烂的橘子:人人都说是 BFS 入门题,我却写了三遍才过
javascript·算法·leetcode
金銀銅鐵17 小时前
[Python] 扩展欧几里得算法
python·数学·算法
葫芦和十三17 小时前
图解 MongoDB 15|journal 与持久化:写入怎么不丢,崩溃怎么恢复
后端·mongodb·面试
葫芦和十三17 小时前
图解 MongoDB 16|压缩:snappy、zstd 和 zlib 的取舍
后端·mongodb·面试
To_OC20 小时前
LC 200 岛屿数量:经典 DFS 入门题,我第一次写居然连方向都搞错了
javascript·算法·leetcode
labixiong21 小时前
实现一个能跑的迷你版Promise(一)
前端·javascript·面试
weedsfly1 天前
还在用 Axios?你可能需要重新理解 XHR 与 Fetch
前端·javascript·面试
Hyyy1 天前
什么是bun?和pnpm有什么区别
前端·面试·bun
To_OC2 天前
LC 128 最长连续序列:别上来就排序,O (n) 解法才是这题的灵魂
javascript·算法·leetcode