LeetCode_Array_300. Longest Increasing Subsequence 最长递增子序列【动态规划】【Java】【中等】

2023-11-04

目录

一,题目描述

英文描述

中文描述

示例与说明

二,解题思路

三,AC代码

Java

四,解题过程

第一搏

第二搏


 

一,题目描述

英文描述

Given an integer array nums, return the length of the longest strictly increasing subsequence.

A subsequence is a sequence that can be derived from an array by deleting some or no elements without changing the order of the remaining elements. For example, [3,6,2,7] is a subsequence of the array [0,3,1,6,2,2,7].

中文描述

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

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

示例与说明

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-increasing-subsequence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二,解题思路

只想到了O(N^2)的动态规划解法,贪心+二分查找O(NlogN)的解法看不懂┗( T﹏T )┛

开一个数组record,记录每一个位置最终答案。

从前往后遍历原始数组nums,计算当前位置 i 最终答案时,需要遍历record数组之前所有小于nums[i]的记录,计算并更新record[i]。

 

三,AC代码

Java

class Solution {
    public int lengthOfLIS(int[] nums) {
        int len = nums.length;
        int[] record = new int[len];
        int ans = 1;
        for (int i = 0; i < len; i++) {
            record[i] = 1;
        }
        for (int i = 1; i < len; i++) {
            for (int j = i - 1; j >= 0; j--) {
                if (nums[i] > nums[j]) {
                    record[i] = Math.max(record[i], record[j] + 1);// !!![0,1,0,3,2,3]
                    // break; // !!![0,1,0,3,2,3]为了避免错过正确答案,需要遍历全部,不能中途break
                }
            }
            ans = Math.max(ans, record[i]);
        }
        return ans;
    }
}

四,解题过程

第一搏

开一个数组record,记录每一个位置最终答案。

从前往后遍历原始数组nums,计算当前位置 i 最终答案时,需要遍历record数组之前所有小于nums[i]的记录,计算并更新record[i]。这么说有点绕,直接上代码:

class Solution {
    public int lengthOfLIS(int[] nums) {
        int len = nums.length;
        int[] record = new int[len];
        int ans = 1;
        // 先把record中初始为1
        for (int i = 0; i < len; i++) {
            record[i] = 1;
        }
        for (int i = 1; i < len; i++) {
            for (int j = i - 1; j >= 0; j--) {
                if (nums[i] > nums[j]) {
                    record[i] = Math.max(record[i], record[j] + 1);// !!![0,1,0,3,2,3]
                    // break; // !!![0,1,0,3,2,3]为了避免错过正确答案,需要遍历全部,不能中途break
                }
            }
            ans = Math.max(ans, record[i]);
        }
        return ans;
    }
}

一开始想偷懒,j从后向前遍历时,遇到第一个小于nums[i]的就跳出来,以[0,1,0,3,2,3]为例

当i为4,即nums[i]=2时,j从3向前遍历,遇到第一个nums[j] < nums[i]=2时,更新record[i]=record[j]+1,然后跳出循环,i++,此时j=2,即nums[j]=0,record[j]=1。

但实际上j继续向左遍历时,j=1时,record[j]=2,这时计算record[i]=3,这样就错过了正确答案。

所以j还是采用从后向前全部遍历的方法,算法整体时间复杂度O(N^2)

第二搏

基于贪心+二分查找。看了好多题解,但是还没看明白┗( T﹏T )┛

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode_Array_300. Longest Increasing Subsequence 最长递增子序列【动态规划】【Java】【中等】 的相关文章

  • Qt子线程的“信号队列”(转载)

    对Qt的多线程编程没有深究 只了解了基本的用法 够我用就行了 之所以写这篇文章是因为前几天遇到一个疑问 如果其他几个线程同时向一个线程发signal 而这个线程没有自己的事件循环 那是不是会丢失signal呢 下面是我总结的两种子线程的工作
  • Android开发把项目打包成apk

    做完一个Android项目之后 如何才能把项目发布到Internet上供别人使用呢 我们需要将自己的程序打包成Android安装包文件 APK Android Package 其后缀名为 apk 将APK文件直接上传到Android模拟器或
  • (2021,FastGAN)用于高保真 few-shot 图像合成的更快、更稳定的 GAN 训练

    Towards faster and stabilized gan training for high fidelity few shot image synthesis 公众号 EDPJ 目录 0 摘要 1 简介 2 相关工作 3 方法

随机推荐

  • 在windows中ohmyzsh 的powerlevel10k主题及插件推荐

    1 安装powerlevel10k git clone https github com romkatv powerlevel10k git ZSH CUSTOM themes powerlevel10k 配置ohmyzsh 主题 vim
  • Java初识泛型

    目录 一 包装类 1 基本数据类型和对应的包装类 2 装箱和拆箱 3 自动装箱和自动拆箱 二 什么是泛型 三 引出泛型 1 泛型的语法 四 泛型类的使用 1 语法 2 示例 3 类型推导 Type Inference 六 泛型如何编译的 1
  • 计算机组成原理题库(2)

    计算机网络题库 目录 计算机网络题库 1 选择题 2 填空题 3 分析判断题 可能会有重复 大家跳着看 4 计算题 5 简述题 1 选择题 1 总线通信中 若发送方和接收方设备的速度有差异 但不是特别大 则最适合选择 时序控制方式 A 同步
  • unity打开VS2017异常解决 unity打开VS2017很慢 unity只打开mono

    早几天开始安装了VS2017 关联好unity 但后续使用编译脚本时 发现经常打开很慢 最后总是打开mono 检查过自己的关联没有错误 也试着修复了几次VS 上网搜了几遍 连老外的网站都看了 最后找到的解决方案是更换成VS2015 原因在于
  • PyTorch深度学习实战(8)——批归一化

    PyTorch深度学习实战 8 批归一化 0 前言 1 批归一化原理 2 批归一化优势 3 批归一化对模型训练的影响 3 1 未使用批归一化 且输入值较小 3 2 使用批归一化 且输入值较小 3 3 使用批归一化 且输入值较大 小结 系列链
  • element ui自定义主题

    一 在element ui 里找到自定义主题 1 1 在自定义主题 设置对应的颜色 并下载 1 2 在项目目录下安装element theme element theme chalk npm i element theme chalk 2
  • virtio sr-iov

    虚拟机规格 12核 32G内存 负载模拟 利用bc将CPU所有核占用提高的98 echo scale 500000 4 a 1 bc l q VirtIO 9 37 Gbps 4 5 12 SR IOV 9 40 Gbps 4 5 7 低负
  • 蓝桥杯单片机组经验分享之(一)引言

    一 开篇激励 蓝桥杯单片机组真的是非常容易拿奖的 尤其是省赛 水军特别多 结合我以及我的师兄师姐的参赛经验 基本上编程题全部完成就能保证省一了 至少广东是这情况 至于想拿国一的话得靠平时专业知识的积累了 只靠程序高分是拿不到国一的 第八届我
  • 小程序使用 企业微信客户服务插件(联系我) contactPlugin

    小程序插件接入步骤 1 开发者在小程序管理后台申请使用插件 添加路径 设置 gt 第三方服务 gt 插件管理 gt 添加插件 搜索并添加插件ID wx104a1a20c3f81ec2 无需审核确认 设置 第三方服务 插件管理 添加插件 2
  • 【Linux初阶】信号入门

    hello 各位读者大大们你们好呀 系列专栏 Linux初阶 本篇内容 Linux信号的基本概念 生活信号 技术信号 信号生命周期 信号的保存位置和发送本质 信号的产生 四种方式 一个系统调用接口 作者简介 计算机海洋的新进船长一枚 请多多
  • vue自定义指令-加载指令v-loading和占位图指令v-showimg

    了解自定义指令的钩子函数 bind 每当指令绑定到元素上的时候 就会立刻执行bind这个函数 只调用一次 和css相关的操作 可以放在这个钩子函数中 inserted 元素插入到DOM中的时候 会执行inserted函数 只调用一次 upd
  • 狂神说SpringMVC02:第一个MVC程序

    狂神说SpringMVC系列连载课程 通俗易懂 基于Spring5版本 视频同步 欢迎各位狂粉转发关注学习 未经作者授权 禁止转载 Hello SpringMVC 在上一节中 我们讲解了 什么是SpringMVC以及它的执行原理 狂神说Sp
  • 图片隐写术 - 透明部落通过BMP的RGB通道隐藏PE数据

    透明部落通过BMP的RGB通道隐藏PE数据 报告和样本 Transparent Tribe APT expands its Windows malware arsenal https blog talosintelligence com 2
  • HASHGRAPH 共识算法详解

    英文版地址 http www swirlds com downloads SWIRLDS TR 2016 02 pdf 摘要 本文通过hashgraph上的一系列例子来说明Swirld hashgraph共识算法 通过结合图形来解释算法详细
  • BP神经网络实例(气温预测)及代码分析(python+tensorflow实现)

    https blog csdn net MrMaurice article details 90031937
  • 一个三本负基础学渣是怎么入行前端的?

    学渣简历 院校 上海杉达学院 上海第一第二的本科 当然是倒数 三本 专业 计算机科学与技术 根本不教前端 毕业时间 2017年 大学学到的知识 如何逃课不被点名 为什么选择计算机科学与技术专业 是喜欢男生吗 纯属巧合 我心仪的专业是护士专业
  • 增量集成测试和非增量集成测试

    增量集成测试 集成是逐步实现的 即逐次将未曾集成测试的模块和已经集成测试的模块 或 子系统 结合成程序包 再将这些模块集成为较大系统 在集成的过程中边连接边测试 以发现连接过程中产生的问题 分为 自顶向下增量式测试 自底向上增量式测试 混合
  • java 判断文件夹是否存在 没有则创建_java中实现判断文件是否存在,不存在则创建...

    一 判断文件是否存在 不存在则创建File file new File d test txt if file exists try file createNewFile catch IOException e e printStackTra
  • qt中常用lambda表达式

    qt中lambda表达式 什么是lambda 个人理解 没有函数名的函数 qt中使用基础 备注 都是在qt5中做的使用 我的qt版本是qt5 11 3 pro文件中 config c 11 常见的lambda表达式使用 延时执行操作 举例
  • LeetCode_Array_300. Longest Increasing Subsequence 最长递增子序列【动态规划】【Java】【中等】

    目录 一 题目描述 英文描述 中文描述 示例与说明 二 解题思路 三 AC代码 Java 四 解题过程 第一搏 第二搏 一 题目描述 英文描述 Given an integer array nums return the length of