第三天-128.最长连续序列

这道题我完全没有思路,求助gpt,让它给我思路:

这个问题要求找出数组中数字连续的最长序列,并且时间复杂度必须是 O(n),可以采用 哈希集(HashSet)来帮助我们高效地判断数字是否存在。以下是解决问题的思路:

我前面两天做的都是hashmap,这道题我也是想着hashmap解决,但是解不出来,还是基础知识太薄弱了,精细刷题,不求多,但求刷的每道题都会!

思路:

1. 使用哈希表进行快速查找:
   - 由于我们需要在 O(1) 的时间内判断某个数字是否存在,可以利用哈希集(`HashSet`)来存储数组中的所有数字。
   
2. 找序列的起点:
   - 遍历数组中的每个数字 `num`,如果 `num-1` 不在哈希集中,那么这个数字 `num` 可能是一个序列的起点。因为只有可能是序列的第一个数字,我们才会从这里开始向后查找。
   - 例如,假设有一组数字 `100, 4, 200, 1, 3, 2`,当遍历到 `1` 时,如果 `0` 不在哈希集中,说明 `1` 是序列 `1, 2, 3, 4` 的起点。

3. 计算序列的长度:
   - 一旦确定了序列的起点(即 `num-1` 不存在),我们就可以从这个数字开始,不断检查 `num+1`, `num+2`, ... 是否存在于哈希集中,直到序列断开。记录下当前序列的长度。

4. 更新最大长度:
   - 在每个序列计算完成之后,更新当前找到的最长序列长度。

5. 时间复杂度:
   - 由于每个数字最多会被处理一次(因为只从序列的起点开始扩展),所以时间复杂度是 O(n)。

算法步骤:

1. 将数组中的所有元素放入哈希集。
2. 遍历数组中的每个元素,如果它的前一个数字(`num - 1`)不在哈希集中,说明它是一个序列的起点。
3. 以这个起点为起始,找出所有连续的数字,并计算序列的长度。
4. 更新最大序列长度。
5. 最终返回最长的序列长度。

class Solution {
    public int longestConsecutive(int[] nums) {
        if(nums.length==0||nums.length==1){
            return nums.length;
        }
        Set<Integer> set=new HashSet<>();
        for(int num:nums){
            set.add(num);
        }
        int longest=1;
        for(int num:set){
            if(!set.contains(num-1)){
                int current=1;
                int currentnum=num;
                while(set.contains(currentnum+1)){
                    current++;
                    currentnum++;
                }
                longest=Math.max(current,longest);
            }
        }
        return longest;
    }
}

代码解析:

1. HashSet:将所有元素添加到哈希集中,这样可以在 O(1) 的时间内查找元素是否存在。
2. 遍历数组:对于每个数字,如果 `num - 1` 不在哈希集中,说明它是一个序列的起点。
3. 找连续数字:从当前数字开始,检查是否有下一个连续的数字,直到找不到为止。记录序列的长度并更新最长序列。
4. 返回结果:最后返回最长的序列长度。

时间复杂度分析:
- 将所有元素加入哈希集的时间复杂度是 O(n)。
- 遍历每个数字并查找序列长度的时间复杂度也是 O(n),因为每个数字最多只会被查找一次。
- 总的时间复杂度是 O(n)。

总结:

1.一开始并不明白时间复杂度为什么是o(n)。

2.我在while循环内部使用num++,虽然不影响外部的num(基本类型,传递值),但是这样做并不规范。

3.int longest=Math.max(current,longest);是错误的,因为在此之前已经声明过longest了。

4.longest=Math.max(current,longest);也可以用三目运算符

 res=(target>res)? target:res;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI周报(10.13-10.19)

AI应用-清华校友用AI破解162个高数定理 加州理工、斯坦福和威大的研究人员提出了LeanAgent——一个终身学习&#xff0c;并能证明定理的AI智能体。LeanAgent会根据数学难度优化的学习轨迹课程&#xff0c;来提高学习策略。并且&#xff0c;它还有一个动态数据库&#xff0c;有效…

Ubuntu如何显示pcl版本

终端输入&#xff1a; apt-cache show libpcl-dev可以看到&#xff0c;Ubuntu20.04&#xff0c;下载的pcl&#xff0c;应该都是1.10版本的

百易云资产管理运营系统 ufile.api.php SQL注入漏洞复现

0x01 产品描述&#xff1a; 百易云资产管理运营系统&#xff0c;是专门针对企业不动产资产管理和运营需求而设计的一套综合解决方案。该系统能够覆盖资产的全生命周期管理&#xff0c;包括资产的登记、盘点、评估、处置等多个环节&#xff0c;同时提供强大的运营分析功能&#…

执行php artisan storage:link报错

php artisan storage:link Call to undefined function Illuminate\Filesystem\symlink() 参考文章 https://learnku.com/laravel/t/73729

基于web的酒店客房管理系统【附源码】

基于web的酒店客房管理系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 系统概述 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 用户信息管理 5.2 会员信息管理 5.3 客房信息管理 5.…

基于SpringBoot健康生活助手微信小程序【附源码】

基于SpringBoot健康生活助手微信小程序 效果如下&#xff1a; 管理员登录界面 管理员主界面 用户管理界面 健康记录管理界面 健康目标管理界面 微信小程序首页界面 活动信息界面 留言反馈界面 研究背景 近年来&#xff0c;由于计算机技术和互联网技术的飞速发展&#xff0c;…

SAP PP之功能 动态安全库存(Dynamic Safety stock)配置及计算逻辑说明测试

SAP动态安全库存&#xff08;Dynamic Safety stock&#xff09;配置及计算逻辑说明测试 概念及计算逻辑&#xff1a; 动态安全库存&#xff08;Dynamic Safety stock&#xff09;&#xff1a; 它根据平均的日需求&#xff08;Average daily requirements&#xff09;数量&am…

父子元素中只有子元素设置margin-bottom的问题

问题代码如下所示 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>.div1 {background-color: red;width: 80px;height: 80px;border: 1px solid orange;}.div2 {bac…

STM32—FLASH闪存

1.FLASH简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&#xff0c;通过闪存存储器接口&#xff08;外设&#xff09;可以对程序存储器和选项字节进行擦除和编程 我们怎么操作这些存储器呢&#xff1f;这就需要用到这个闪存存储器接口了&#xff0c;闪…

联系拯救者Y9000P2022笔记本电脑进入BIOS快捷键

联系拯救者Y9000P2022笔记本电脑进入BIOS快捷键 文章目录 联系拯救者Y9000P2022笔记本电脑进入BIOS快捷键1. 进入BIOS快捷键2. 快速进入BIOS设置界面3. 快速进入启动项选择界面 1. 进入BIOS快捷键 进入BIOS设置界面的快捷键为F2快速进入启动项选择界面的快捷键为F12 2. 快速进…

充电桩高压快充发展趋势

一、为什么要升级充电电压 1、新能源发展的困境 随着电动汽车加快发展&#xff0c;用户对电动汽车接受度不断提高&#xff0c;充电问题是影响电动车普及的重要因素&#xff0c;用户快速补能的需求强烈&#xff0c;例如节假日经常会遇到&#xff0c;高速充电1小时&#xff0c;…

jmeter中设置属性值的注意事项

jmeter中&#xff0c;可以在beanshell sampler, jsr223 sampler中对变量、属性等做一些操作&#xff0c;使得测试脚本变得更有关联性和一致性&#xff0c;以便完成更好的测试工作。 但是&#xff0c;在实际运用中&#xff0c;设置属性值经常会有些情况需要注意。不是我们以为的…

全能PDF工具集 | PDF Shaper Ultimate v14.6 便携版

软件简介 PDF Shaper是一款功能强大的PDF工具集&#xff0c;它提供了一系列用于处理PDF文档的工具。这款软件使用户能够轻松地转换、分割、合并、提取页面以及旋转和加密PDF文件。PDF Shaper的界面简洁直观&#xff0c;使得即使是新手用户也能快速上手。它支持广泛的功能&…

智能体网络时代即将来临,我们需要新的连接技术

备注&#xff1a;如果你也对这个话题感兴趣&#xff0c;欢迎联系我们&#xff1a; email: chgaoweigmail.com Discord: https://discord.gg/CDYdTPXXMB 官网: https://pi-unlimited.com 我们的方案代码已经开源&#xff0c;github&#xff1a;https://github.com/chgaowei/…

鸿蒙开发 四十四 ArkTs BuilderParam传递UI(二)

子组件多个BuilderParam&#xff0c;必须通过参数的方式传入&#xff0c;如果界面中有多个界面需要传递&#xff0c;可以定义多个尾随闭包&#xff0c;如图&#xff1a; 在自定义组件中调用&#xff1a; 在使用时候调用是作为参数传递给自定义的组件&#xff0c;参数是界面&…

KUKA外部自动配置(上)

通过外部PLC对机器人自动运行进程进行控制&#xff0c;其控制原理是&#xff1a;外部PLC通过外部自动运行接口向机器人控制系统发出机器人进程的相关信号&#xff08;如&#xff1a;运行许可、故障确认、程序启动等&#xff09;&#xff0c;机器人控制系统向外部PLC系统发送有关…

探索YOLO v11:3D人工智能的RGB-D视觉革命

哈喽&#xff0c;各位OAK中国的朋友们! 大家好我是张伯生 今天&#xff0c;我想给大家演示一下最新发布的Yolo V11神经网络 下面我将演示的一个程序是&#xff1a;同时在我们的OAK相机上跑Yolo V11和RGB-D&#xff0c;也就是彩色相机和深度图的一个叠加的一个效果 RGB-D和Yo…

uniapp uni.uploadFile errMsg: “uploadFile:fail

uniapp 上传后一直显示加载中 1.检查前后端上传有无问题 2.检查失败信息 await uni.uploadFile({url,filePath,name,formData,header,timeout: 30000000, // 自定义上传超时时间fail: async function(err) {$util.hideAll()// 失败// err 返回 {errMsg: "uploadFile:fai…

【中国象棋】unity中国象棋自我对弈

中国象棋 一级目录二级目录三级目录 棋类游戏的难度等级自我对弈代码游戏管理器棋子和格子棋子移动类棋子规则类检测将军类悔棋UI类 一级目录 二级目录 三级目录 棋类游戏的难度等级 1、跳棋、五子棋&#xff1a;一星 2、中国象棋、国际象棋&#xff1a;三星 3、围棋&#…

分享一套SpringBoot+Vue民宿(预约)系统

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue民宿(预约)系统&#xff0c;分享下嘿嘿。 项目介绍 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c…