LeetCode LCR 119.最长连续序列

LCR 119.最长连续序列

题面:

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

示例:

input nums = [100,4,200,1,3,2]

output 4

解析:
  • 这道题目简单的思路就是,对nums中的数字进行排序,设本次遍历到的数字为num,判断num + 1是否是下一个不等于num的数字。
  • 优化:
    • 针对于下一个出现的数字而言,num/num + 1/others,我们可以通过降重操作来保证下一个为num + 1/others,我们一般常用的实现就是set,而set的底层就是哈希表,相对于HashMap而言,HashSet仅对键进行操作。于是乎,我们可以通过哈希表查询来完成num + 1是否存在来推进最长连续序列,这样就省去了排序所带来的时间消耗。
    • 注意:若num - 1在当前set中,意味着最长连续序列,一定不是从num向后推进的。即若[num, y]满足连续序列的要求,[num - 1, y]一定也是满足要求的,故可以不判断。
  • n l o g ( n ) → n nlog(n)\rightarrow n nlog(n)→n
复杂度

时间复杂度
O ( n ) O(n) O(n)
空间复杂度
O ( n ) O(n) O(n)

Code
c++ 复制代码
// C++
class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        unordered_set<int> s;
        for (auto num : nums)
        {
            s.insert(num);
        }
        int ans = 0;
        for (int x : s)
        {
            if (s.count(x - 1))
            {
                continue;
            }
            int y = x + 1;
            while (s.count(y)) 
            {
                y++;
            }
            ans = max(ans, y - x);
        }
        return ans;
    }
};
python 复制代码
# Python
class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        ans = 0
        temp = set()
        for num in nums:
            temp.add(num)
        for x in temp:
            if x - 1 in temp:
                continue
            y = x + 1
            while y in temp:
                y += 1
            ans = max(ans, y - x)
        return ans
rust 复制代码
// Rust
use std::collections::HashSet;
use std::cmp;

impl Solution {
    pub fn longest_consecutive(nums: Vec<i32>) -> i32 {
        let mut temp = HashSet::new();
        for num in nums.iter() {
            temp.insert(num);
        }
        let mut ans = 0;
        for x in temp.iter() {
            if temp.contains(&(**x - 1)) {
                continue;
            }
            let mut y = **x + 1;
            while temp.contains(&y) {
                y += 1;
            }
            ans = cmp::max(ans, y - **x);
        }
        return ans;
    }
}
相关推荐
Zach_yuan2 分钟前
深入浅出 JSONCpp
linux·服务器·网络·c++
寻寻觅觅☆19 分钟前
东华OJ-基础题-104-A == B ?(C++)
开发语言·c++
lightqjx29 分钟前
【C++】unordered系列的封装
开发语言·c++·stl·unordered系列
天天爱吃肉821843 分钟前
跟着创意天才周杰伦学新能源汽车研发测试!3年从工程师到领域专家的成长秘籍!
数据库·python·算法·分类·汽车
alphaTao1 小时前
LeetCode 每日一题 2026/2/2-2026/2/8
算法·leetcode
m0_715575341 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python
甄心爱学习1 小时前
【leetcode】判断平衡二叉树
python·算法·leetcode
深蓝电商API1 小时前
滑块验证码破解思路与常见绕过方法
爬虫·python
阿猿收手吧!1 小时前
【C++】string_view:高效字符串处理指南
开发语言·c++
Ulyanov1 小时前
Pymunk物理引擎深度解析:从入门到实战的2D物理模拟全攻略
python·游戏开发·pygame·物理引擎·pymunk