leetcode300. 最长递增子序列(动态规划-java)

news2024/12/24 20:21:13

最长递增子序列

  • leetcode300. 最长递增子序列
    • 题目描述
    • 解题思路
    • 代码演示:
  • 二分法改进(N * logN)
  • 动态规划专题

leetcode300. 最长递增子序列

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

题目描述

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

示例 1:
输入:nums = [10,9,2,5,3,7,101,18]
输出:4
解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。

示例 2:
输入:nums = [0,1,0,3,2,3]
输出:4

示例 3:
输入:nums = [7,7,7,7,7,7,7]
输出:1

提示:
1 <= nums.length <= 2500
-104 <= nums[i] <= 104

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

解题思路

我们设计动态规划算法,不是需要一个 dp 数组吗?我们可以假设 dp[0…i-1] 都已经被算出来了,然后问自己:怎么通过这些结果算出 dp[i]?
根据题目的定义,我们很容易得出base case dp[i] = 1;任何位置本身的长度可以先初始化为1.
我们再看怎么求出具体值,用图来演示:
在这里插入图片描述
知道dp[3] = 3,时,怎么求dp[4] 呢,4 位置的数字从0 位置开始比较到3位置,
如果4位置的数字比3位置的数字大,那么dp[4] = 1 + dp[3];
知道这个过程我们就可以写出dp算法了.

代码演示:

	/**
	*  最长递增子序列 可以直接复制进力扣测试
	*/
   int lengthOfLIS(int[] nums) {
       int N = nums.length;
       //动态规划表
       int[]dp = new int[N];
       for(int i = 0; i < N; i++){
       //base case 每个位置本身长度
           dp[i] = 1;
           for(int j = 0;j < i; j++){
           // i 位置依次向前比 ,比j 位置大,就是 1 + dp[i]
           // 根据不同j位置上的数,来更新最大值
               if(nums[i] > nums[j]){
                  dp[i] = Math.max(dp[i],1 + dp[j]);  
               }
               
           }
       }
       int res = 0;
       //取出 dp表中的最大值 就是我们要的答案.
       for (int i = 0; i < dp.length;i++){
           res = Math.max(res,dp[i]);
       }
       return res;
    }

二分法改进(N * logN)

	/**
	*  最长递增子序列 可以直接复制进力扣测试
	*/
   int lengthOfLIS(int[] nums) {
        int N = nums.length;
        int[] ends = new int[N];
        int pies = 0;
        for(int i = 0 ; i < nums.length;i++){
            int cur = nums[i];
            int L = 0;
            int R = pies;
            while(L < R){
                int mid = (L + R) / 2;
                if(ends[mid] >= cur){
                    R = mid;
                }else{
                    L = mid + 1;
                }
            }

            if(L == pies){
                pies++;
            }
            ends[L] = cur;
        }

        return pies;
    }

动态规划专题

leetcode494. 目标和

leetcode337. 打家劫舍 III

leetcode213. 打家劫舍 II

leetcode198. 打家劫舍

leetcode174. 地下城游戏

leetcode688. 骑士在棋盘上的概率

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/674569.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++标准输出

C将输入和输出看作字节流&#xff0c;输入时&#xff0c;程序从输入流中抽取字节&#xff0c;输出时&#xff0c;程序将自己插入到输出流中&#xff0c;流充当了程序与流源或流目标之间的桥梁&#xff0c;也就是说C通过流与硬件&#xff0c;文件相关联&#xff0c;流赋予了C程序…

[数字图像处理]第六章 彩色图像处理

第六章 彩色图像处理 引言 ​ 彩色图像处理可分为两个主要领域&#xff1a;全彩色处理和伪彩色处理。在第一类中&#xff0c; 通常要求图像用全彩色传感器获取&#xff0c;如彩色电视摄像机或彩色扫描仪。在第二类中&#xff0c;问题是对一种特定的单色灰度或灰度范围赋予一种…

设计模式之装饰者模式笔记

设计模式之装饰者模式笔记 说明Decorator(装饰)目录装饰者模式示例类图快餐类炒饭类炒面类装饰者类鸡蛋类培根类测试类 说明 记录下学习设计模式-装饰者模式的写法。JDK使用版本为1.8版本。 Decorator(装饰) 意图:动态地给一个对象添加一些额外的职责。 结构: 其中&#x…

【Neo4j教程之CQL命令基本使用】

&#x1f680; Neo4j &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;C…

Python基础篇(二):入门基础必备知识

Python基础篇(一)&#xff1a;如何使用PyCharm创建第一个Python项目(包含tools) 入门基础必备知识 1. 标识符2. 关键字2.1 关键字字典 3. 引号3.1 表示字符串3.2 在字符串中使用引号3.3 创建多行字符串3.4 在注释中使用引号 4. 编码5. 输入输出5.1 输入示例5.2 输出示例5.3 格…

王道计算机网络学习笔记(3)——数据链路层

前言 文章中的内容来自B站王道考研计算机网络课程&#xff0c;想要完整学习的可以到B站官方看完整版。 三&#xff1a;数据链路层 3.1&#xff1a;数据链路层功能概述 结点&#xff1a;主机、路由器 链路&#xff1a;网络中两个结点之间的物理通道&#xff0c;链路的传输介…

PolarFormer:Multi-camera 3D Object Detection with Polar Transformer——论文笔记

参考代码&#xff1a;PolarFormer 1. 概述 介绍&#xff1a;在仓库RoboBEV中总结了现有的一些bev感知算法在不同输入情况下的鲁棒性&#xff0c;在这些感知算法中PolarFormer拥有较为不错的泛化性能。这个算法的思想是将之前由直角坐标系栅格化构建bev网格&#xff0c;转换到由…

Unity之透明度混合与ps的透明度混合计算结果不一致

一、问题 前段时间学习shader时发现了一个问题&#xff0c;一张纯红色透明度为128的图片叠加在一张纯绿色的图片上得出的结果与ps中的结果不一致。网上查找了ps中的透明混合的公式为 color A.rgb*A.alpha B.rgb*(1-A.alpha)。自己使用代码在unity中计算了一下结果总是不对。…

Python--异常处理

Python--异常处理 <font colorblue>一、异常<font colorblue>二、异常处理语句<font colorblue>1、try...except语句<font colorblue>2、try...except...else语句<font colorblue>3、try...except...finally语句<font colorblue>4、raise语…

leetcode354. 俄罗斯套娃信封问题(动态规划-java)

俄罗斯套娃信封问题 leetcode354. 俄罗斯套娃信封问题题目描述:解题思路代码演示 动态规划专题 leetcode354. 俄罗斯套娃信封问题 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/russian-doll-envelopes 题目描述: 给你…

c++学习之模板

目录 一&#xff0c;模板的概述 二&#xff0c;函数模板 1.函数模板的定义 2.函数模板的注意事项 3.函数模板的重载 4.函数模板的局限性 三&#xff0c;类模板 1.类模板的概念 2.类模板定义方式 3.类模板的成员函数在类外实现 4.函数模板作为类模板的友元 5.在写程…

《大学英语4》期末考试复习(一)听力原文+答案速记

目录 Unit 1 Long conversation Passage 1 Unit 2 Long conversation Passage 1 Unit 3 Long conversation Passage 1 Unit 4 Long conversation Passage 1 Unit 5 Long conversation Passage 1 Unit 6 Long conversation Passage 1 Unit 7 Long conversat…

Java线程池小结

目录 一.什么是线程池 二.线程池的好处是什么 三.四种基本线程池及其使用 newCachedThreadPool newFixedThreadPool newScheduledThreadPool newSingleThreadExecutor 线程池的四种拒绝策略 选择一:AbortPolicy 选择二:CallerRunsPolicy 选择三:DiscardPolicy 选择四…

【Java】Java核心要点总结70

文章目录 1. volatile 如何保证变量的可⻅性&#xff1f;2. volatile 可以保证原⼦性么&#xff1f;3. synchronized 关键字4. synchronized 和 volatile 的区别5. synchronized 和 ReentrantLock 的区别 1. volatile 如何保证变量的可⻅性&#xff1f; 在Java中&#xff0c;使…

html实现多种风格的时间轴(附源码)

文章目录 1.设计来源1.1 对称风格时间轴1.2 横向风格时间轴1.3 回忆风格时间轴1.4 记事风格时间轴1.5 简易风格时间轴1.6 科技风格时间轴1.7 列表风格时间轴1.8 跑道风格时间轴1.9 人物风格时间轴1.10 容器风格时间轴1.11 沙滩风格时间轴1.12 双边风格时间轴1.13 图文风格时间轴…

【verilog基础】时钟无毛刺切换电路 Clock Glitch Free

文章目录 一、时钟切换电路:容易产生毛刺二、时钟无毛刺切换电路:在S端增加一些控制通路三、异步时钟无毛刺切换电路:使用同步电路解决亚稳态问题四、真题题目解答一、时钟切换电路:容易产生毛刺 1、在芯片运行时经常需要切换时钟源,通常的实现方式是:通过mux来选择不同的…

用试题这把“剑“帮你破除指针与数组之间的那些猫腻

作者主页&#xff1a;paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《系统解析C语言》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白…

【linux】在Linux系统开机的时候卡在/dev/nvme0n1p1:clean / files / blocks界面进不去

一、问题背景 开机的时候没办法开机&#xff0c;一直停留在下面这个界面。 x86/cpu: SGX disabled by BIOS dev/nvme0n1p3:clean, 21118/30523392 fies, 122066176/122070272 blocks dev/nvme0n1p4:clean, 486125/61038592 fies,21657184/244140544b1ocks 试过网上的一些方法…

Ubuntu20.04+Intel SGX(一):环境安装与测试

文章目录 测试环境一、检查服务器是否支持SGX方法1&#xff1a;cpuid查看是否支持SGX方法2&#xff1a;test-sgx.c测试是否支持SGX验证是否支持SPS 二、启动 SGX 服务参考文档启动 SGX方法1&#xff1a;BIOS 启动SGX方法2&#xff1a;软启动 SGX检查SGX是否开启成功 三、安装 S…

C++在线五子棋对战(网页版)项目:环境搭建

Centos-7.6环境搭建 安装wget工具 wget工具是Linux中的一个下载文件的工具&#xff0c;支持通过 HTTP、HTTPS、FTP 三个最常见的TCP/IP协议 下载&#xff0c;并可以使用 HTTP 代理。可以使用以下命令进行下载&#xff1a; sudo yum install wget 下载后&#xff0c;可以使用以…