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;
    }
}
相关推荐
ZhengEnCi4 小时前
模型训练完整流程:从数据准备到模型上线的 10 个关键步骤(全文可跑)
后端·算法
weixin_307779135 小时前
RAG 面试陷阱——混合检索并非无条件优越:一个条件反转实验
人工智能·python·面试·职场和发展
nice_lcj5207 小时前
深入理解 Java 反射:从 Class 对象到方法调用(含性能实测 + 迷你 IOC 实战 + 面试考点)
java·开发语言·后端·面试
吞下星星的少年·-·8 小时前
Div.3 CF 1131A题(排序,模拟)
算法·模拟·排序
圣保罗的大教堂8 小时前
leetcode 453. 最小操作次数使数组元素相等 中等
leetcode
aichitang20249 小时前
代数拓扑学与现代前沿视角
考研·算法·数学建模·ai·拓扑学·高考
二本咕咕-机械转码9 小时前
FreeRTOS深入解析(一)_链表与并发保护——哨兵循环链表、排序键游标、临界区与关调度
单片机·算法·链表
-银雾鸢尾-9 小时前
两数之和-C++实现
c++·算法
j7~9 小时前
【动态规划算法专题】动态规划五部曲实战:泰波那契数、三步问题、最小花费爬楼梯
c++·算法·动态规划·数据结构与算法