当前位置: 首页 > 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;
    }
}

相关文章:

  • 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 为例,增删改查语法及其他高级特性
  • 蒋圣龙突遭伤病出战世预赛存疑,国足生死战后防线严重减员
  • 知名猎头公司创始人兼首席执行官庄华因突发疾病逝世,享年62岁
  • 马上评|“衣服越来越难买”,对市场是一个提醒
  • 沪喀同心|为新疆青少年提供科普大餐,“小小博物家(喀什版)”启动
  • 上海国际电影节纪录片单元,还世界真实色彩
  • 上海团队在医学顶刊连发两文,率先提出“证据污染”循证概念