Leetcode面试经典150题-300.最长递增子序列

news2024/12/24 20:22:08

 

解法都在代码里,不懂就留言或者私信

面试的话普通的动态规划解法就够了,如果要出彩,看看我提交的最终的解

class Solution {
    /**解题思路分析:这个题的普通解法是标准的动态规划
    对于每一个位置的值,看看前面所有的比它小的数里的答案最大是多少,然后把这个答案加1就是当前的问题的答案
    如果前面没有比这个数小的,它的答案就是1
    这个解法的时间复杂度,外层循环O(N),循环比当前数小的每个数的结果也是O(N)
    所以整体时间复杂度O(N^2)*/
    public int lengthOfLIS2(int[] nums) {
        /**题目已经给了数据范围,这个没必要,但是健壮性是一种习惯 */
        if(nums == null || nums.length == 0) {
            return 0;
        }
        /**就一个节点,那肯定答案是1 */
        if(nums.length == 1) {
            return 1;
        }
        /**2,3长度的时候也可以继续判断,我这里就不继续了,让他们融合在动态规划里 
        dp数组含义是dp[i]表示以当前位置结尾的最长递增子序列的长度(一定以当前位置结尾)*/
        int[] dp = new int[nums.length];
        /**dp[0]只能选择0位置的数,当然是1 */
        dp[0] = 1;
        /**max是我们定义的结果值,遍历的时候会拿以每个位置结尾时候的最长递增子序列的长度,谁大选谁 */
        int max = 1;
        for(int i = 1; i < nums.length; i++) {
            /**以比当前数小的数结尾的最长递增子序列长度是多少 */
            int preMax = 0;
            for(int pre = 0; pre < i; pre ++) {
                /**从0到i-1找所有比当前数小的数,如果遇到就尝试更新preMax */
                if(nums[pre] < nums[i]) {
                    preMax = Math.max(dp[pre], preMax);
                }
            }
            /**preMax代表的是比当前数小的数结尾的最长递增子序列的长度,我比它大,因为我的加入又将这个子序列的长度延长了1 */
            dp[i] = preMax + 1;
            max = Math.max(max, dp[i]);
        }
        return max; 
    }
    /**最优解法:我们定义一个数组help,help[i]位置用于存储最长递增子序列长度为i+1的最小的数
    每遍历一个位置,我们在help中往前找到第一个大于等于它的数,如果找到就替换这个位置的数
    如果没有找到就把这个数组的有效长度扩充1
    最后数组的有效长度就是最长递增子序列的长度 */
    public int lengthOfLIS(int[] nums) {
        /**定义辅助数组help,最大期望长度是nums.length,所以这里我们也暂时定义为nums.length*/
        int[] help = new int[nums.length];
        /**validLen表示当前有效的长度(已经填了值的长度),也表示help数组下一个要填的位置 */
        int validLen = 0;
        for(int num : nums) {
            /**在help数组中找到第一个大于等于它的数,*/
            int index = firstGreaterOrEquals(help, 0, validLen-1, num);
            /**如果没有找到就说明当前num比前面所有的数都大,它可以放在所有数的后面让最长递增子序列的有效长度+1 */
            if(index == -1) {
                help[validLen ++] = num;
            } else {
                /**理论上这个数前面的那个数肯定比num小,也就是num放在这个数的位置跟前面的数
            组成的最长递增子序列长度不变  */
                help[index] = num;
            }
        }
        return validLen;
    }

    /**在数组nums的left~right区间查找第一个大于等于target的数,nums肯定是从小到大排序的*/
    public int firstGreaterOrEquals(int[] nums, int left, int right, int target) {
        int ans = -1;
        while(left <= right) {
            int mid = left + ((right-left) >> 1);
            if(nums[mid] >= target) {
                ans = mid;
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return ans;
    }
}

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

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

相关文章

[数据集][目标检测]流水线物件检测数据集VOC+YOLO格式9255张26类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;9255 标注数量(xml文件个数)&#xff1a;9255 标注数量(txt文件个数)&#xff1a;9255 标注…

分析Facebook在区块链技术中的应用与前景

随着数字技术的飞速发展&#xff0c;区块链作为一种具有去中心化、安全性高、透明度强等特点的技术&#xff0c;逐渐引起了各大科技公司的关注。Facebook&#xff08;现Meta&#xff09;也不例外&#xff0c;其在区块链技术上的探索不仅显示了对未来技术趋势的敏锐洞察&#xf…

周易测算系统开发:融合古典智慧与现代技术的创新实践

一、引言 周易&#xff0c;作为中国古代文化的瑰宝&#xff0c;蕴含着深邃的哲学思想与预测智慧&#xff0c;其独特的六十四卦体系及爻变原理&#xff0c;自古以来便被人们用于探索自然规律、人生哲理及未来趋势。随着科技的飞速发展&#xff0c;将周易智慧与现代计算机技术相结…

虚幻5|AI行为树,跟随task(非行为树AI)

这个可以不需要行为树 1.打开ai的角色蓝图后&#xff0c;添加一个函数&#xff0c;命名为跟距离改变速度 并用tick调用 2.编辑函数

python实现自动化生成pdf报告

easypdf使用手册 1. 项目介绍1.1 关于1.2 easypdf 有什么优势1.2 easypdf 可以用来做什么1.3 项目框架1.4 项目教程视频 2. 安装项目环境2.1 安装Python32.2在Windows上安装Python32.3 在Mac上安装Python32.4 在Linux上安装Python32.5 在Windows上安装Pycharm2.6 在Mac上安装Py…

Funsound语音识别技术之 基于paraformer的自定义命令(唤醒)词识别

免费语音识别转写&#xff08;优于讯飞&#xff09;&#xff1a;www.funsound.cn 前言 Paraformer在声学后验上通过greedy search得到语音识别结果&#xff0c;对于自定义命令&#xff08;唤醒&#xff09;词识别&#xff0c;肯定还得走asr模型。对此我们可以在paraformer上为…

基于Java爬取微博数据(五) 补充微博正文列表图片 or 视频 内容

基于Java爬取微博数据五 补充微博正文列表图片 or 视频 内容 数据分析补充图片 or 视频执行结果 在通过对微博正文内容中的图片 or 视频内容进行分析后&#xff0c;图片 or 视频 链接是可以直接通过 Java 代码下载或者转存的&#xff0c;那么这样就可以补充我们在 【基于Java爬…

差旅费太高是什么原因?BI大神带你一起实操财务数据分析!

在数字经济的大潮中&#xff0c;数据已不仅仅是冰冷的数字&#xff0c;而是企业决策的活水源头。对财务来说&#xff0c;每一笔账目&#xff0c;每一次报销&#xff0c;都可能是企业健康的晴雨表。而随着数字化时代的到来&#xff0c;BI分析在财务数据管理中发挥着越来越重要的…

一、Socket介绍(也叫套接字)

一、定义 通过IP地址或者端口 将两个电脑连接起来&#xff1b; Socket是网络通信最常用的&#xff0c;除了这个还有HTTP&#xff1b; Http是一个弱联网&#xff1b;Socket用于长连接&#xff0c;使用的是Tcp&#xff1b; 除了这个还有一个SuperSocket&#xff0c;是对Socket…

初识spring security (一),一文弄懂默认配置

一、简单导入依赖 1、导入pom <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.2</version></parent><modelVersion>4.0.0</modelVersion&g…

伺服电机抖动的解决方案

一、电机运行过程中抖动 1.原因分析 ①增益参数设置不当&#xff1a;增益参数不合适导致系统过于敏感&#xff0c;出现振荡&#xff1b; ②机械共振&#xff1a;机械系统的固有频率与电机运行频率接近&#xff0c;导致共振&#xff1b; ③反馈信号噪声&#xff1a;反馈装置…

KPaaS业务集成扩展平台是什么?有哪些功能?有哪些企业使用了?

KPaaS业务集成扩展平台是什么&#xff1f; KPaaS是由深圳市金众诚科技有限公司推出的&#xff0c;面向中小企业组织的一款企业数字化一站式业务集成扩展平台。 平台采用先进的微服务架构&#xff0c;基于Spring Boot和Spring Cloud技术&#xff0c;集成了Swagger、NGINX、Sen…

国内智能车零部件头号玩家引望:年出货300万套,估值1150亿

作者 |德新 编辑 |王博 8月19日&#xff0c;长安汽车发布公告&#xff0c;其联营企业阿维塔科技在当日的董事会上&#xff0c;通过了对引望公司的投资方案议案。 阿维塔将在8月20日与华为签约&#xff0c;阿维塔将出资115亿元&#xff0c;对引望公司持股10%&#xff0c;华为持…

jmeter简单发送接口

一、安装jmeter 拥有java环境&#xff0c;再下载jmeter 安装之后解压到本地&#xff0c;jmeter中的bin目录配置到环境变量中 之后可以通过cmd中 jmeter.bat命令运行 二、利用jmeter发送接口请求 1、添加线程组 添加->线程->线程组 2、添加http请求 添加->取样器-&g…

Yolov10网络详解与实战(附数据集)

文章目录 摘要模型详解模型实战训练COCO数据集下载数据集 COCO转yolo格式数据集&#xff08;适用V4&#xff0c;V5&#xff0c;V6&#xff0c;V7&#xff0c;V8&#xff09;配置yolov10环境训练断点训练测试 训练自定义数据集Labelme数据集格式转换训练测试 总结 摘要 模型详解…

Tiktok和Facebook广告哪个效果更好?

Tiktok广告作为新兴的数字营销工具&#xff0c;以其独特的短视频格式在全球范围内迅速获得了广泛的受众关注&#xff0c;如今已经和Facebook并列成为了社交媒体营销广告的两巨头&#xff0c;刚开始做海外社交媒体广告的朋友可能会纠结&#xff0c;这两者哪个的广告效果更好&…

大模型微调课程及大模型应用开发课程介绍

大模型实验室是在学校现有的实验室建设基础上&#xff0c;依托行业标杆企业&#xff0c;聚焦行业大模型产业发展方向&#xff0c;建设一个产学研一体化的合作教学平台&#xff0c;形成“教与学紧密结合、理论与实践紧密结合&#xff0c;学校与企业紧密结合”的创新教育模式。大…

搭建 PXE 远程安装服务器和设置 Kickstart 无人值守安装

目录 搭建 PXE 远程安装服务器 1.安装并启用 TFTP 服务 2.安装并启用 DHCP 服务 3.准备 Linux 内核、初始化镜像文件 4.准备 PXE 引导程序 5.安装FTP服务&#xff0c;准备CentOS 7 安装源 6.配置启动菜单文件 7.关闭防火墙&#xff0c;验证 PXE 网络安装 设置 Kicksta…

SpringSecurity6

一、Spring Security概述 1、Spring Security简介 ​ Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在 Spring 应用上下文中配置的 Bean&#xff0c;充分利用了 Spring IoC&#xff08;Inversion of…

el-table实现动态添加行,并且有父子级联动下拉框

<template><div><el-button click"addRow">添加行</el-button><el-table :data"tableData" style"width: 100%"><el-table-column label"序号"type"index"width"100"align"…