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

leetcode hot100 第三题:最长连续序列(Java)

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例 1:

输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

示例 2:

输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9

提示:

  • 0 <= nums.length <= 105
  • -109 <= nums[i] <= 109

方法一:HashSet【时间复杂度:O(n)】

优化:

1.直接遍历查找改为哈希表查找,时间复杂度为O(1)

2.对一个连续序列中的元素进行删减,让其只在最小的元素才开始+1遍历,避免重复遍历

代码:

class Solution {   //方法一:HashSet

    public int longestConsecutive(int[] nums) {

        // 建立一个存储所有数的哈希表,同时起到去重功能

        Set<Integer> hashset = new HashSet<>();

        for(int num : nums){

            hashset.add(num);

        }

        int ans = 0;   // 存储最长连续序列的长度

        // 遍历去重后的所有数字

        for(int num : hashset){

            int cur = num;

            // 只有当num-1不存在时,才开始向后遍历num+1,num+2,num+3......

            if(!hashset.contains(cur - 1)){

                while(hashset.contains(cur + 1)){

                    cur++;

                }

            }

            ans = Math.max(ans, cur - num + 1);

        }

        return ans;

    }

}

http://www.lryc.cn/news/388246.html

相关文章:

  • 利用Jaspar进行转录因子结合位点预测
  • Ubuntu添加系统字体
  • 深度学习相关概念及术语总结2
  • 基于改进滑模、经典滑模、最优滑模控制的永磁同步电机调速系统MATLAB仿真
  • windows环境下创建python虚拟环境
  • Fragment切换没变化?解决办法在这里
  • Linux系统防火墙iptables(下)
  • 你需要精益管理咨询公司的N+1个理由
  • [机器学习]-3 万字话清从传统神经网络到深度学习
  • 网络安全等级保护2.0(等保2.0)全面解析
  • 用Lobe Chat部署本地化, 搭建AI聊天机器人
  • 基于ARM的通用的Qt移植思路
  • IT专业入门,高考假期预习指南
  • 芯片详解——AD7606C
  • IDEA 编译单个Java文件
  • 人工智能业务分析
  • 随机文本生成器
  • java中输入输出流的继承关系
  • c++应用网络编程之一基本介绍
  • Web后端开发概述环境搭建项目创建servlet生命周期
  • Java 位运算详解
  • 智能体实战:开发一个集成国内AI平台的GPTs,自媒体高效智能助手
  • 完美世界|单机版合集(共22个版本)
  • Jenkins的一些记录
  • 讲讲js中的prototype和__proto__
  • JavaScript的学习之DOM的查询(一)
  • 充电宝哪个品牌比较好一点?多维度实测西圣、绿联、倍思充电宝!
  • ubuntu安装QT
  • DataGrip 2024 po for Mac 数据库管理工具解
  • 《C++ Primer》导学系列:第 13 章 - 拷贝控制