当前位置: 首页 > news >正文

面试热题(最长上升子序列)

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

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

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

       由上图我们可以很容易直到该数组中的最长递增子序列的长度为4,可是计算机可不知道这么算,所以我们要告诉它得这么算,我们仔细找找规律

       这种的分析是不是能让你看出一点点规律,如果当前值i比i-1前的最长自序列的最后一个值大时,将当前这个值加入这个递增子序列中,是不是我们就比较容易得到:

        for (int i = 1; i <nums.length; i++) {for (int j = 0; j <i; j++) {if(nums[j]<nums[i]){dp[i]=Math.max(dp[j]+1,dp[i]); }}}

       那么我们动态规划中最难的一步已经写出来了,状态转移方程,接下来就是动规的一般解题步骤,入参判断,维护一个dp数组,对其进行初始化,具体的看下面的源代码:

 public int lengthOfLIS(int[] nums) {if(nums==null||nums.length==0){return 0;}int[] dp=new int[nums.length];Arrays.fill(dp,1);for (int i = 1; i <nums.length; i++) {for (int j = 0; j <i; j++) {if(nums[j]<nums[i]){dp[i]=Math.max(dp[j]+1,dp[i]); }}}return Arrays.stream(dp).max().getAsInt();}

       在大家再给大家介绍一种解法,面试时两种解法任选一种即可,我认为还是动态规划这种比较容易好记

堆纸牌方法:

这种方法一般人还真想不到,可能那种久经牌场的人说不定可以想到:

       类似于蜘蛛纸牌一样的游戏规则,每次找到最左边的适合当前牌的牌堆,如果没有就直接新创一个牌堆

 没堆牌出一张组成子序列,牌堆的堆数越多,最长子序列的长度也就越大:

【5,6,7,J】、【5,7,8,J】...

所以我们应该怎么样去模拟这个算法呢?

由于我们要时刻的知道每堆牌的顶牌,所以我们可以维护一个数组去记录每个堆的牌顶

int[] top=new int[nums.length];
int count=0;//一开始,未进行发牌,牌堆数为0

 如果有这么sexy的荷官给你发牌,你做题怎么可能会错?比如邱淑贞姐姐给你发牌,哒哒哒...

       因为数组中的索引是从0开始的,但是牌堆数确实从1开始的,所以当我们查找可以放当前牌的最左牌堆的索引等于牌堆数的时候,就应该重新创建一个牌堆,如果不太了解二分搜索最左侧搜索,请看二分搜索篇

    public int lengthOfLIS(int[] nums) {if(nums==null||nums.length==0){return 0;}int[] top=new int[nums.length];int count=0;//进行发牌for(int num:nums){int left=0;int right=count;//这里给大家说明以下,这种二分查找区间的时候区间是左闭右开的//因为count代表的是堆数(从1开始),但是right指针代表的是数组的索引(从0开始),指针永远不可能到达堆数的数量while(left<right){int mid=left+(right-left)/2;if(top[mid]>=num){right=mid;//不断的去优先收缩右区间}else{left=mid+1;//收缩左区间}}//找到最小的大于等于num的索引大小if(left==count){count++;}//更新牌顶元素top[left]=num;}return count;}

相关文章:

面试热题(最长上升子序列)

给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 输入&#xff1…...

Vue 简版文件预览笔记

简版文件预览笔记 调用方法 <script lang"ts" setup>import {exportFileData,preViewFile,} from /xxx/tools.ts;import {fileDownload,} from /api/xxx/xx;// 预览方法const handleViewBtn () > {const filePath 获取预览地址;const urlFormat 获取预…...

数据结构--栈和队列

文章目录 栈的概念和结构栈的实现栈的数据结构栈的初始化和销毁出栈和入栈获取栈顶、大小&#xff0c;判空 队列的概念和结构队列的实现队列的数据结构队列的初始化和销毁队列的插入 队列的删除获取队头和队尾的数据获取队列长度和判空 栈和队列的一些题目1.有效的括号2.用队列…...

泰国的区块链和NFT市场调研

泰国的区块链和NFT市场调研 基本介绍 参考&#xff1a; https://zh.wikipedia.org/zh-hans/%E6%B3%B0%E5%9B%BD参考&#xff1a; https://hktdc.infogram.com/thsc–1h7k2303zo75v2x zz制度&#xff1a; 君主立宪制&#xff08;议会制&#xff09; 国王&#xff1a; 玛哈哇集拉…...

精彩回顾 | D-Day深圳 上海站:高频策略研发再提速

上周末&#xff0c;DolphinDB 分别在上海及深圳成功举办了两场 D-Day 分享会&#xff0c;来自国内头部券商、公募基金以及多家私募机构的数十位核心策略研发、数据分析专家们分享了 DolphinDB 在量化交易各个环节的使用经验&#xff0c;并基于与同类技术栈的优劣势对比&#xf…...

新法!《个人信息保护合规审计管理办法(征求意见稿)》解读

8月3日&#xff0c;依据《中华人民共和国个人信息保护法》等法律法规&#xff0c;国家互联网信息办公室起草了《个人信息保护合规审计管理办法&#xff08;征求意见稿&#xff09;》&#xff08;下文简称“办法”&#xff09;&#xff0c;并向社会公开征求意见。 据悉&#xff…...

南大通用数据库-Gbase-8a-学习-37-delete误删数据恢复方法

一、前提 在delete误删数据之后&#xff0c;没有再对此表进行其他ddl、dml和load等操作&#xff0c;可以使用手动切换AB版本的方式来进行数据恢复。 二、环境 名称值CPUIntel(R) Core(TM) i5-1035G1 CPU 1.00GHz操作系统CentOS Linux release 7.9.2009 (Core)内存3G逻辑核数…...

【高光谱图像的去噪算法】通过全变异最小化对受激拉曼光谱图像进行去噪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

UEditorPlus v3.3.0 图片上传压缩重构,UI优化,升级基础组件

UEditor是由百度开发的所见即所得的开源富文本编辑器&#xff0c;基于MIT开源协议&#xff0c;该富文本编辑器帮助不少网站开发者解决富文本编辑器的难点。 UEditorPlus 是有 ModStart 团队基于 UEditor 二次开发的富文本编辑器&#xff0c;主要做了样式的定制&#xff0c;更符…...

百度翻译API整合SpringBoot

案例背景,按照官方给的Demo,实在是太啰嗦了, 大致步骤 封装数据>签名>发送请求, 仔细一看劈里啪啦一大堆,最后还要手动关流关连接,难道整合到SpringBoot项目里面我还得为内存管理考虑 所以就有了如下需求 使用 RestTemplate的对象进行发送请求数据,RestTemplate由s…...

Spring @Primary、@Order、JSR @Priority作用与区别

前言 Primary、Order、Priority三个注解很常见&#xff0c;关于它们的异同&#xff0c;这里做个总结。 Primary、Order、Priority Primary Spring Primary控制注入优先级。 Order Spring Order控制注入到List中的排序&#xff0c;值越小优先级越高&#xff0c;不能是负数&am…...

【Mac】mac 系统下格式化U盘或移动硬盘为ext4格式

1. 打开终端&#xff0c;安装 homebrew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"2. 安装之后再次运行此命令 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"…...

ubuntu20.4 sgx环境配置

一、driver安装 1.在该下载地址将3个.bin文件下载下来&#xff0c;下载地址&#xff1a;https://download.01.org/intel-sgx/latest/linux-latest/distro/ubuntu20.04-server/ 2.到下载文件夹下输入下面命令&#xff0c;以赋予.bin文件的执行权限 sudo chmod 777 sgx_linux_x64…...

01.图片下拉触底分页加载每张图片

需求点分析 图片列表滚动触底的逻辑 将图片id组成的一维数组根据指定个数一组拆分为二维数组定义一个索引初始值为-1&#xff0c;图片列表滚动触底&#xff0c;索引值自增&#xff0c;然后将拆分好的图片id二位数组对应的数据读出来放到图片id的数组图片根据列表新增的id取读取…...

“精准学习嵌入式开发:明确目标,提升技能“

嵌入式领域涵盖广泛&#xff0c;不可能一次性掌握所有知识。因此&#xff0c;明确学习目标和方向非常重要。选择感兴趣且与职业发展相关的领域进行深入学习是明智之举。 嵌入式技术在不断发展&#xff0c;过去与现在存在差异。选择学习当前行业的主流技术和趋势是明智选择。掌…...

C语言--联合体-共用体

有时候同一个内存空间存放类型不同&#xff0c;不同类型的变量共享一块空间 像结构体&#xff0c;但是有区别 1、 结构体元素有各自单独空间&#xff0c; 共用体元素共享空间&#xff0c;空间大小由最大类型确定 同一块空间&#xff0c;有时候存放char类型、有时候存放int型&am…...

echarts实现中国地图下钻进入下一级行政区(地图钻取)

获取geo数据&#xff1a; 可以使用node爬虫获取数据 最好多爬几遍&#xff0c;因为有时候会获取错误 实现逻辑 拥有geo数据后 请求geo数据注册地图 registerMap配置echarts增加事件监听&#xff08;点击事件&#xff09; 如果点击了&#xff0c;回到第一步。功能就是循环以…...

从0到1学会手写操作系统,我只用了2个小时

黑马嵌入式教程再出力作 重磅发布第三弹 《自己动手写嵌入式操作系统》 问&#xff1a;嵌入式开发不是只学单片机就行&#xff1f;为什么要学操作系统&#xff1f; 答&#xff1a;年轻人&#xff0c;别把路走窄了。且听我说↓↓↓ 嵌入式产品分为两大类&#xff1a;一类简单…...

软件包管理

一、rpm管理软件包 1、获得rpm的软件包 1&#xff09;去官网安装不推荐 找自己光盘有没有这个包 装好需要的包之后装qq 2&#xff09;去镜像站点&#xff0c;推荐 二、yum/dnf管理软件包 解决软件的依赖关系&#xff0c;可以自动的去服务器下载软件包 1、使用yum软件包 使用…...

【逗老师的PMP学习笔记】9、项目资源管理

目录 一、规划资源管理1、【关键工具】责任分配矩阵RACI矩阵2、【关键工具】组织理论2.1、马斯洛需求层次理论2.2、麦格雷戈-X-Y理论2.3、赫兹伯格双因素理论 3、【关键输出】资源管理计划4、【关键输出】团队章程 二、估算活动资源1、【关键输入】资源日历 三、获取资源1、【关…...

动手学深度学习——锚框(带代码详解)

1. 前言在前面的内容中&#xff0c;我们已经知道&#xff1a;物体检测不仅要识别“是什么”&#xff0c;还要定位“在哪里”边界框用于表示目标位置数据集中的标签需要同时包含类别和边界框信息但新的问题马上就出现了&#xff1a;一张图片中目标的位置、大小、形状都不固定&am…...

零样本分类避坑指南:AI万能分类器使用中的注意事项与技巧

零样本分类避坑指南&#xff1a;AI万能分类器使用中的注意事项与技巧 1. 零样本分类技术概述 零样本分类&#xff08;Zero-Shot Classification&#xff09;是自然语言处理领域的一项突破性技术&#xff0c;它允许模型在没有特定任务训练数据的情况下&#xff0c;仅凭用户提供…...

零基础部署ChatGLM3-6B:RTX 4090D显卡上的智能对话系统

零基础部署ChatGLM3-6B&#xff1a;RTX 4090D显卡上的智能对话系统 1. 项目概述与核心优势 ChatGLM3-6B是智谱AI与清华大学KEG实验室联合推出的开源对话模型&#xff0c;基于RTX 4090D显卡的本地部署方案彻底解决了云端服务的延迟和隐私问题。这个32k超长上下文版本特别适合需…...

Qwen2.5-0.5B支持JSON输出?结构化响应部署实操手册

Qwen2.5-0.5B支持JSON输出&#xff1f;结构化响应部署实操手册 “5 亿参数&#xff0c;1 GB 显存&#xff0c;能跑 32 k 长文、29 种语言、JSON/代码/数学全包圆。” 看到这句话&#xff0c;你是不是觉得有点夸张&#xff1f;一个只有5亿参数的“小不点”模型&#xff0c;真的…...

gitru:一个由 Rust 打造的零依赖 Git 提交信息校验工具芯

一、项目背景与核心价值 1. 解决的核心痛点 Navicat的数据库连接密码并非明文存储&#xff0c;而是通过AES算法加密后写入.ncx格式的XML配置文件中。一旦用户忘记密码&#xff0c;常规方式只能重新配置连接&#xff0c;效率极低。本项目只作为学习研究使用&#xff0c;不做其他…...

STM32F1轻量级USB HID键盘鼠标复合设备固件库

1. 项目概述KeyboardMouse 是一个面向 STM32F1 系列微控制器的轻量级 USB HID&#xff08;Human Interface Device&#xff09;固件库&#xff0c;专为实现复合型 USB 键盘与鼠标设备而设计。该库不依赖第三方 USB 协议栈&#xff08;如 ST 的 USB Device Library 或 Keil ARM …...

Linpeas使用教程

在Kali Linux的权限提升工具库中&#xff0c;Linpeas&#xff08;Linux Privilege Escalation Awesome Script&#xff09;是一款专注于Linux系统本地权限提升的自动化脚本工具&#xff0c;隶属于“PEASS&#xff08;Privilege Escalation Awesome Scripts SUITE&#xff09;”…...

别再忽略#@save和assert了!Python开发中的这两个小技巧能帮你省下大把时间

Python开发中的高效利器&#xff1a;#save与assert实战指南 在Python开发的世界里&#xff0c;真正区分普通开发者与高效开发者的往往不是对复杂框架的掌握程度&#xff0c;而是对这些看似简单却极其强大的小工具的熟练运用。今天我们要深入探讨的两个工具——#save注释和asser…...

OZON选品工具深度测评:这五款帮你精准掘金俄罗斯市场

在俄罗斯电商市场&#xff0c;OZON正成为越来越多中国卖家的掘金热土。然而&#xff0c;面对陌生的市场、海量的商品和复杂的规则&#xff0c;如何高效选品、精准运营&#xff0c;是每个卖家必须跨越的门槛。选品工具&#xff0c;正是那把关键的钥匙。今天&#xff0c;我们就来…...

高性能客服系统技术内幕:通过 SpinWait 自旋等待结构体提升高频消息分发性能挥

1. 智能软件工程的范式转移&#xff1a;从库集成到原生框架演进 在生成式人工智能&#xff08;Generative AI&#xff09;从单纯的文本生成向具备自主规划与执行能力的“代理化&#xff08;Agentic&#xff09;”系统跨越的过程中&#xff0c;.NET 生态系统正在经历一场自该平台…...