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

力扣算法Hot100——128. 最长连续序列

在这里插入图片描述
题目要求时间复杂度为O(n),因此不能使用两次循环匹配。

  • 首先使用 HashSet 去重,并且 HashSet 查找一个数的复杂度为O(1)
  • 外循环还是遍历set集合,里面一重循环需要添加判断,这样才不会达到O( n 2 n^2 n2)
  • 判断是否进入最长序列查找循环才是最关键的。对于 num,如果 num 是最长序列的开始数字,那么 set 集合中一定不存在 num - 1,否则num 就不会是最长序列的开始数字。凭借此逻辑设置 if 条件是关键。
  • 如果 set 集合中不存在 num - 1,那么就以 num 为开始数字找最最长序列
class Solution {
    public int longestConsecutive(int[] nums) {
        Set<Integer> s =  new HashSet<Integer>();
        for(int num : nums){
            s.add(num);
        }

        int MaxCount = 0;

        for(int num : s){
            // 如果set表中存在比当前数小 1 的数,那么当前数一定不是最长序列的开始数字
            if(!s.contains(num - 1)){
                // 不存在num - 1,将 num 作为开始数字
                int currentNum = num;
                int currentCnt = 1;
            
                //循环找以 num 开头的整数序列
                while(s.contains(currentNum + 1)){
                    currentNum += 1;
                    currentCnt += 1;
                }

                MaxCount = Math.max(MaxCount, currentCnt);
            }
            
        }
        return MaxCount;
    }
}
http://www.dtcms.com/a/82662.html

相关文章:

  • C# WPF编程-TabControl
  • 【Linux网络】手动部署并测试内网穿透
  • AWS AI中几个重要的工具介绍
  • CA 机构如何防止中间人攻击
  • leecode463.岛屿的周长
  • Java利用POI+JFreeChart 实现excel导出数据和图标(折线统计图)
  • Kafka Snappy 压缩异常分析与解决方案
  • C++编译汇编八股总结
  • redis的典型应用 --缓存
  • Spring Boot 与 MyBatis Plus 整合 KWDB 实现 JDBC 数据访问
  • Bitcoin Thunderbolt 内测通道开启,加速比特币交易新时代
  • C++ 语法之数组指针
  • MyBatis 面试专题
  • ruoyi-vue部署linux(war包方式)
  • 鸿蒙app 中 web app和h5的通信
  • 麒麟操作系统安装人大金仓数据库
  • 解释下Cumulative Layout Shift (CLS)以及如何优化?
  • 数据库:一文掌握 Oracle 的各种指令(Oracle指令备忘)
  • 唯品会商品详情页架构设计与实现:高并发场景下的技术实践‌
  • 以mysql 为例,增删改查语法及其他高级特性
  • 3.21-1自动化框架
  • 3.3V升5V2A升压转换,WD1016可兼容SD6271
  • 文件相关函数的总结与记忆
  • 简洁、实用、无插件和更安全为特点的WordPress主题
  • 《南京日报》专题报道 | 耘瞳科技“工业之眼”加码“中国智造”
  • Billu_b0x靶机攻略
  • linux下基本命令和扩展命令(安装和登录命令、文件处理命令、系统管理相关命令、网络操作命令、系统安全相关命令、其他命令)欢迎补充噢
  • 微信小程序检测滚动到某元素位置的计算方法
  • 34、在 deque中使用 [] 操作符和 at() 方法有何区别?
  • 深度强化学习中的深度神经网络优化策略:挑战与解决方案