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;
    }
}
相关推荐
CappuccinoRose10 分钟前
回溯法 - 软考备战(四十三)
算法·排列组合·路径·n皇后·子集·解数独·岛屿
m0_7411733312 分钟前
如何处理SQL中的NULL值_使用ISNULL或COALESCE函数
jvm·数据库·python
AC赳赳老秦14 分钟前
OpenClaw进阶技巧:批量修改文件内容、替换关键词,解放双手
java·linux·人工智能·python·算法·测试用例·openclaw
步辞39 分钟前
css伪类选择器-nth-child应用技巧_循环选择列表或表格行的实现方法
jvm·数据库·python
CoderCodingNo40 分钟前
【信奥业余科普】C++ 的奇妙之旅 | 12:程序的交互与加工——数据的输入与算术运算
开发语言·c++
yx868xy1 小时前
Cuda加速直线拟合
c++·cuda
Robot_Nav1 小时前
Shape-Aware MPPI(SA MPPI)算法:基于RC-ESDF的任意形状机器人实时轨迹优化
算法·机器人·sa-mppi
ithadoop1 小时前
Solana入门:区块链新手速成指南(第二阶段:开发入门)
rust·web3·区块链·智能合约·solana
蜗牛在听雨1 小时前
基于 C++ 的 UG/NX 二次开发环境配置
c++·二次开发·ug
xcbrand1 小时前
快消品品牌策划公司哪家好
大数据·人工智能·python