• 128. 最长连续序列( 数组背诵题吧)


     

    难度中等

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

    请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

    示例 1:

    输入:nums = [100,4,200,1,3,2]
    输出:4
    解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

    示例 2:

    输入:nums = [0,3,7,2,5,8,4,6,0,1]
    输出:9
    

    提示:

    • 0 <= nums.length <= 105
    • -109 <= nums[i] <= 109

    假设我们有一个数组[0,3,7,2,5,8,4,6,0,1]
    我们先通过肉眼知道了其最长的序列为[0,1,2,3,4,5,6,7,8]
    在这个序列中,如果我们从 1 开始,往下寻找最长序列,可得[1,2,3,4,5,6,7,8]
    如果我们从 2 开始,往下寻找最长序列,可得[2,3,4,5,6,7,8]
    明显可以看出,两个序列是会重复的,我们的计算也会重复
    这么样才能不重复呢,我们从 这个序列的最小元素也就是序列起点 开始,
    往下寻找能接在这个元素后面的其他元素,就会得到该序列的最长长度

    class Solution {
    public:
        int longestConsecutive(vector<int>& nums) {
            unordered_set<int> n_set;
            for(int a: nums) {
                n_set.emplace(a);
            }
            int res = 0;
            for(int a : n_set) {
                // 包含a-1,以a 为起点肯定不是最长答案
                if (n_set.count(a-1)) {
                    continue;
                }
                int cur = a;
                while(n_set.count(cur+1)) {
                    cur++;
                }
                res = max(res,cur-a+1);
            }
            return res;
        }
    };
  • 相关阅读:
    DB-MySQL:MySQL 正则表达式
    DB-MySQL:MySQL 事务
    DB-MySQL:MySQL 索引
    DB-MySQL:MySQL 临时表
    DB-MySQL:MySQL 复制表
    DB-MySQL:MySQL 序列使用
    DB-MySQL:MySQL 处理重复数据
    DB-MySql:MySQL 及 SQL 注入
    mysql
    PHP+jQuery 注册模块的改进之一:验证码存入SESSION
  • 原文地址:https://www.cnblogs.com/zle1992/p/16283062.html
Copyright © 2020-2023  润新知