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;
    }
}
相关推荐
棉猴6 小时前
玩游戏学Python1-Python和pgzero库的安装
python·pygame·玩游戏·pgzero·pgzrun
诺伦6 小时前
GEO优化数据实证:78%引用流向官网的机制拆解与小品牌三步管线实战教程 | RiseClaw玄策
python·seo·geo·内容营销·ai搜索
oooost6 小时前
pytorch学习笔记1
python·学习方法
数字融合7 小时前
透明化视频孪生虚实映射一体化融合技术
人工智能·python·数码相机
jack186897 小时前
Lovable.Dev 全栈应用快速落地实战指南
python
华研前沿标杆游学8 小时前
【标杆研学】走进茅台集团|对标学习长期主义与匠心精神
python
GitFun8 小时前
KDJ vs RSI:11年数据实测,金叉死叉输了48个点
python·股票·量化交易
李可以量化8 小时前
从零读懂配对交易(上):从套利本源到配对交易的核心逻辑
python·区块链·量化交易·通达信·qmt
CCblandy8 小时前
HTTP 长连接 3 类故障实测:[WinError 10053]、99 个 TIME_WAIT、69 次多余握手,4 种对策怎么选
后端·python·网络协议·http·云原生·性能优化·架构
wangchunyu1149 小时前
Python 数据可视化实战入门教程
开发语言·python·信息可视化