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

【LeetCode】【算法】128. 最长连续序列

LeetCode 128. 最长连续序列

题目描述

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
示例:
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

思路

  1. 用一个Set将输入数组里的元素全部存起来
  2. 遍历这个Set的Iterator,如果!set.contains(i-1),就开始计算序列长度(之所以要做这个判断,是因为如果set.contains(i-1)的话,可以避免重复计算)
  3. 计算序列长度的方法是使用while循环,条件为set.contains(i+1),则当前序列长度++,i++,直到set中不再包含连续的数字时结束。最后比较这次计算的序列长度最长序列长度,得到最终结果:max=Math.max(cur_count, max);

代码

class Solution {
    public int longestConsecutive(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for (int num : nums) {
            set.add(num);
        }

        int max = 0;
        Iterator<Integer> iterator = set.iterator();
        while (iterator.hasNext()) {
            int i = iterator.next();
            if (!set.contains(i-1)){
                int cur_count = 1;
                while (set.contains(i+1)){
                    cur_count++;
                    i++;
                }
                max = Math.max(cur_count, max);
            }
        }
        return max;
    }
}

http://www.kler.cn/a/381834.html

相关文章:

  • 活着就好20241226
  • 老旧小区用电安全保护装置#限流式防火保护器参数介绍#
  • I.MX6U 启动方式详解
  • 【网络安全产品大调研系列】1. 漏洞扫描
  • 本地摄像头视频流在html中打开
  • Linux的VIM基本操作
  • 【系统架构设计师】六、UML建模与架构文档化
  • 传智杯 第六届-复赛-第二场-B
  • Rust 跨平台构建与部署实战:构建并部署跨平台应用
  • SpringCloudGateway — 网关路由
  • 宝塔Linux面板安装PHP扩展失败报wget: unable to resolve host address ‘download.bt.cn’
  • VLAN高级+以太网安全
  • C++原创游戏宝强越狱第二季即将回归
  • Kafka 之消息广播消费
  • C++简单工厂模式
  • vue 3:监听器
  • Chrome与火狐哪个浏览器的性能表现更好
  • 计算机性能监控体系:Quark2.0
  • 用例设计方法之等价类划分法
  • Linux常用命令(你一定用得上!)
  • 基于Redis缓存机制实现高并发接口调试
  • 【大数据学习 | kafka】消费者的分区分配规则
  • WEB 应用防护系统的部署方式
  • 软件工程3.0和软件工程2.0的区别
  • 深度学习注意力机制类型总结pytorch实现代码
  • Socket篇(学习前言)