[LeetCode] Longest Consecutive Sequence

本文介绍了一种寻找整数数组中最长连续元素序列的算法,并提供了两种实现方式,使用哈希表来达到O(n)的时间复杂度。适用于未排序的整数数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Longest Consecutive SequenceFeb 14

Given an unsorted array of integers, find the length of the longest consecutive elements sequence.

For example,
Given [100, 4, 200, 1, 3, 2],
The longest consecutive elements sequence is [1, 2, 3, 4]. Return its length: 4.

Your algorithm should run in O(n) complexity.

因为有O(N)的限制。

因此用hash来搞。

 

 

class Solution {
public:
    int longestConsecutive(vector<int> &num) {
    unordered_map<int, int> hash;
    vector<bool> flag(num.size(), false);
    for (int i = 0; i < num.size(); ++i) {
        hash[num[i]] = i;
    }

    int maxlen = 1;
    int less = 0, more = 0;
    for (int i = 0; i < num.size(); ++i) {
        if (flag[i]) continue;
        int tmp = num[i];
        auto it = hash.find(--tmp);
        less = 0;
        while (it != hash.end()) {
            ++less;
            flag[it->second] = true;
            it = hash.find(--tmp);
        }
        tmp = num[i];
        auto it2 = hash.find(++tmp);
        more = 0;
        while (it2 != hash.end()) {
            ++more;
            flag[it2->second] = true;
            it2 = hash.find(++tmp);
        }
        tmp = less + more + 1;
        maxlen = maxlen > tmp ? maxlen : tmp;
    }
    return maxlen;
}
};

 

class Solution {
public:
    int longestConsecutive(vector<int> &num) {
        unordered_map<int, bool> m;
        int len = num.size();
        for (int i = 0; i < len; i++) {
            m[num[i]] = false;
        }
        
        int res = 0;
        for (int i = 0; i < len; i++) {
            if (m[num[i]]) continue;
            int low = num[i], high = num[i];
            while (m.count(low) != 0) m[low] = true, low--;
            while (m.count(high) != 0) m[high] = true, high++;
            int t = high - low - 1;
            if (t > res) res = t;
        }
        return res;
    }
};

 

资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 在 IT 领域,我们有时需要清理系统中不再需要的软件,比如 OneKey 一键还原。OneKey 是一款常见的 Windows 系统备份与还原工具,但当用户不再使用它时,可能会面临卸载难题。通常的卸载方法可能无法完全清除 OneKey,因为它的某些组件可能隐藏在系统各处。 在开始卸载之前,要先关闭所有 OneKey 的进程,可通过任务管理器来完成这一步。接着打开控制面板,找到程序和功能选项,尝试从这里卸载 OneKey,这是常规的卸载方式。如果在控制面板的卸载程序列表里找不到 OneKey,那就得手动查找它的安装位置。一般情况下,软件的安装目录位于 C 盘的 Program Files 或 Program Files (x86) 文件夹中。进入 OneKey 的安装目录,寻找卸载程序或脚本并执行,以此启动卸载流程。 在卸载过程中,可能会碰到注册表项的问题。OneKey 安装时会在注册表中添加许多键值,这些键值在常规卸载后可能还存在,从而导致残留文件和错误消息。所以,卸载完成后需要手动清理注册表。不过,修改注册表是存在一定风险的,误删可能会引发系统问题。因此,在动手之前最好备份注册表或整个系统。打开注册表编辑器(regedit),搜索与 OneKey 相关的键值,比如程序名称、作者等,然后安全地将它们删除。 此外,OneKey 可能在启动项中设置了自启动项,这会导致即使卸载后,程序仍能在开机时运行。打开系统配置(msconfig),在启动选项里查找并禁用或删除 OneKey 的相关条目。 如果按照上述步骤操作后仍无法彻底卸载 OneKey,可以考虑使用专业的卸载工具,例如 Revo Uninstaller。这类工具能够深度扫描并清理程序留下的痕迹,有助于完全卸载 OneKey。如果手头有
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值