Leetcode面试经典150题-128.最长连续序列-递归版本另解

news2025/1/10 17:05:34

之前写过一篇这个题的,但是可能代码比较复杂,这回来个简洁版的,这个是递归版本

可以看看之前的版本,两个版本面试用哪个都保过

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

class Solution {
    /**对于之前的解法,我现在提供一共更优的解,但是这种可能会比较难懂一些(思想方面)
    代码其实是很简洁的,总体思想如下:不需要排序直接把所有数放入map,map的key是当前数字,value是当前数开始的连续的长度
    初始值都是1,后面再遍历数组,遍历过程中查找当前数+1在map中的记录,直到找不到为止,比如我们第一个示例[100,4,200,1,3,2]
    我们便利到1的时候会在map中找到2的记录,然后取它的value+1,找2的过程又会递归查找3,直到找不到5的时候停,5的value是0,4取0+1=1
    3取1+1=2 2取2+1=3,1取3+1=4而对于100,我们查找101就直接失败了,所以以它连续的就是0+1=1*/
    public int longestConsecutive(int[] nums) {
        /**如果长度小于2,有多少数就有多大的连续长度*/
        if(nums.length < 2) {
            return nums.length;
        }
        /**大于等于2的情况我们先把每个数都放在map里,key是数字本身,value是以它为开始的连续长度,初始值都设置为1
        这样做还有另外一个原因就是可以避免重复项的干扰*/
        Map<Integer, Integer> countMap = new HashMap<>();
        for(int num : nums) {
            countMap.put(num, 1);
        }
        /**定义结果值,既然有数,至少也得是个1吧*/
        int longest = 1;
        /**遍历数组,计算以当前数字开始的最长的长度*/
        for(int num : nums) {
            int curAns = countConsecutive(countMap, num);
            longest = Math.max(longest, curAns);
        }
        return longest;
    }
    /**通过countMap查找target开始的连续数字的长度 */
    public int countConsecutive(Map<Integer, Integer> countMap, int target) {
        /**我们通过主方法调用这个方法的时候当然target肯定是存在的,但是我们会递归调用 target+1
        直到不存在为止,所以这里一定要判断是不是存在,不存在返回0 */
        if(!countMap.containsKey(target)) {
            return 0;
        }
        /**这里有个大的优化,一定要做,如果当前map中存的target对应的value已经大于1了,说明算过了,不用重复计算
        不然每次都得从头开始一个一个算,肯定会超时的,比如先找1,然后找2.。。一直找到10000肯定不行,如果之前已经有2的记录了(大于1)
        现在取2的记录+1就行了 */
        if(countMap.get(target) > 1) {
            return countMap.get(target);
        }
        /**如果存在,找target+1开头的最大长度 */
        int count = countConsecutive(countMap, target + 1) + 1;
        /**不要忘了记录当前的结果*/
        countMap.put(target, count);
        return count;
    }
}

运行时间和百分百确实有所提升,但是真的是同样的时间复杂度,也没感觉常数时间降低了多少

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

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

相关文章

【vulhub】thinkphp5 2-rce 5.0.23-rce 5-rce 漏洞复现

2-rec 1.启动环境 cd /.../vulhub/thinkphp/2-rce # cd进入2-rce靶场文件环境下 docker-compose up -d # docker-compose启动靶场 docker ps -a # 查看开启的靶场信息2.访问192.168.146.136&#xff1a;8080网页 3.构造payload http://192.168.146.136:80…

Openharmony 下载到rk3568实现横屏

前言&#xff1a; Openharmony 源码版本4.1 release 板子&#xff1a;rk3568 1.修改“abilities”中的“orientation”实现横竖屏 entyr->src->module.json5文件里面添加 "orientation": "landscape", 2.修改系统源码属性实现横竖屏切换 通过这…

IDEA取消自动选择光标所在行

今天出现了一个怪事&#xff1a; 当我使用IDEA编写代码的时候&#xff0c;单击下一行或者上一行的时候&#xff0c;莫名其妙它会自己选中一行&#xff0c;导致我要么是回车代码直接没了&#xff0c;要么是代码直接给我搞错位了&#xff0c;还得按ctrlz返回&#xff0c;十分的恶…

【C++】:模板初阶—函数模板|类模板

✨ Blog’s 主页: 白乐天_ξ( ✿&#xff1e;◡❛) &#x1f308; 个人Motto&#xff1a;他强任他强&#xff0c;清风拂山岗&#xff01; &#x1f4ab; 欢迎来到我的学习笔记&#xff01; 本文参考博客&#xff1a;一同感受C模版的所带来的魅力 一、泛型编程思想 首先…

代码随想录算法训练营第五十一天 | 99.岛屿数量-深搜 ,99.岛屿数量-广搜 ,100.岛屿的最大面积

目录 99.岛屿数量-深搜 思路 方法一&#xff1a; 深度优先搜索-先判断 方法二&#xff1a;深度优先搜索-终止条件 心得收获 99.岛屿数量-广搜 思路 广度优先搜索 方法一&#xff1a;广度优先搜索 100.岛屿的最大面积 思路 深度优先搜索 广度优先搜索 方法一&am…

c语言——用一维数组输出杨辉三角形

一.代码 #include <stdio.h> int Num[100]; int Hang; int Lie; int a; int Flag; int main() {Lie 1;Hang 1;a 0;while (1) {//列1为1if (Lie 1) {Num[1] 1;Lie;}//数据存到数组里面while (Hang > Lie && Hang ! 2) { if (Hang!Lie) {Flag Num[Lie] …

解锁Web3.0——Scaffold-eth打造以太坊DApp的终极指南

&#x1f680;本系列文章为个人学习笔记&#xff0c;目的是巩固知识并记录我的学习过程及理解。文笔和排版可能拙劣&#xff0c;望见谅。 目录 前言 一、快速部署 1、前期准备&#xff1a; 2、安装项目&#xff1a; ​ 二、配置部署运行环境 1、初始化本地链&#xff1a;…

Qt-QWidget的windowOpacity属性(16)

目录 描述 相关API 使用 设置槽函数 两个问题 第一个问题&#xff1a;浮点数精确度问题 第二个问题&#xff1a;防御性编程 描述 这个属性就是用来设置窗口的不透明度的 相关API 使用 我们创建一个新的项目来进行测试 如下&#xff0c;我们再把这两个按钮设置一下名…

改进YOLOv8系列:加入多尺度卷积注意力MSCA注意力: ,即插即用,助力小目标检测

改进YOLOv8系列:加入非对称卷积块ACNet,加强CNN 的内核骨架 论文研究概括MSCA模块介绍需要修改的代码MSCA代码创建yaml文件测试是否创建成功本文提供了改进 YOLOv8注意力系列包含不同的注意力机制以及多种加入方式,在本文中具有完整的代码和包含多种更有效加入YOLOv8中的ya…

模型 跃迁(泛化)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。跨越式变革与发展。 1 跃迁的应用 1.1 个人成长中的跃迁现象&#xff1a;职业转型与技能升级 背景描述&#xff1a; 在个人职业发展的过程中&#xff0c;跃迁现象指的是个体在技能、知识和职业地位上…

Python教程(二十一) : 从零开始制作计算器应用【PyQt6】

文章目录 专栏列表环境准备代码解析主要组件初始化界面布局设置事件处理计算逻辑 运行应用完整代码示例截图总结注意 专栏列表 Python教程&#xff08;十&#xff09;&#xff1a;面向对象编程&#xff08;OOP&#xff09;Python教程&#xff08;十一&#xff09;&#xff1a;…

国产化软件内容及要求

国产化软件是指在中国自主研发的软件产品&#xff0c;旨在减少对外部技术的依赖&#xff0c;提升国家信息安全和软件产业的自主可控能力。国产化软件涵盖了从操作系统、数据库、办公软件、各类应用软件、中间件等多个层面。 操作系统&#xff1a;国产操作系统如银河麒麟、UOS、…

博客建站8 - 选择hexo博客网站的主题

1. 环境说明2. 体验过的hexo站点主题 2.1. Acorn2.2. hexo-theme-cafe2.3. volantis2.4. NexT 3. 参考文档 1. 环境说明 博客框架&#xff1a; Hexo网站主题&#xff1a; Volantis评论系统&#xff1a; Disqus服务器: 阿里云ECS服务器系统&#xff1a; Ubuntu 24.04 LTS 2. …

仕考网:结构化面试流程介绍

(一)结构化面试 结构化面试&#xff0c;也叫做标准化面试&#xff0c;考官按照预先设定好的一套试题以问答方式与应试者当面交谈&#xff0c;根据应试者的言语、行为表现&#xff0c;对其相关能力和个性特征作出相应评价。 &#xff08;二&#xff09;考试流程 抵达考场——…

CAD 多个页面在一个任务栏图标设置

命令行输入快捷键op或&#xff1a; 下图打对号&#xff0c;确定即可。

vsCode 自动发布文件到服务器文件

1.新建 publish.cmd文件 xcopy D:\_____\*.* \\_____\jyou /s /e /y源文件夹和目标文件夹按照自己替换&#xff0c;/s /e /y会复制空白文件夹&#xff0c;且遇到相同文件直接覆盖 2.将这个文件复制到nodemodules/bin目录下 3.在package.json中配置发布命令

翻译器大分享,这5款你选哪款?

作为一个经常需要阅读和翻译各种学术论文和专业文档的研究生&#xff0c;我深知找到一款好用的翻译工具是多么重要。今天&#xff0c;我就来跟大家聊聊我用过的四款翻译PDF文档的工具它们的表现如何呢&#xff1f;一起来看看吧&#xff01; 一、福昕在线翻译 网址&#xff1a;…

[米联客-XILINX-H3_CZ08_7100] FPGA程序设计基础实验连载-38 LVDS Select IO高速Serdes

软件版本&#xff1a;VIVADO2021.1 操作系统&#xff1a;WIN10 64bit 硬件平台&#xff1a;适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA 实验平台&#xff1a;米联客-MLK-H3-CZ08-7100开发板 板卡获取平台&#xff1a;https://milianke.tmall.com/ 登录“米联客”FPGA社区 http…

使用 VisionTransformer(VIT) FineTune 训练驾驶员行为状态识别模型

一、VisionTransformer(VIT) 介绍 大模型已经成为人工智能领域的热门话题。在这股热潮中&#xff0c;大模型的核心结构 Transformer 也再次脱颖而出证明了其强大的能力和广泛的应用前景。Transformer 自 2017年由Google提出以来&#xff0c;便在NLP领域掀起了一场革命。相较于…

Typora 画图技巧(思维利器,含文本及图示~!)

Typora 画图技巧&#xff08;思维利器&#xff0c;含文本及图示~&#xff01;&#xff09; 设置图表示例流程图横向流程图竖向流程图标准流程图标准流程图&#xff08;横向&#xff09; UML时序图UML时序图一UML时序图二UML标准时序图一UML标准时序图二 甘特图类图状态图饼图 &…