• [LeetCode] 128. Longest Consecutive Sequence


    传送门

    Description

    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.

    思路

    题意:给定一个未排序的数组,问最长的连续的数值有多少个。

    题解:unordered_set内部用hash实现,均摊复杂度为O(1),那么我们可以遍历数组中的这些数,将其向左向右延伸,并且在延伸查找的同时进行删除,减少重复遍历的次数。

     
     
    class Solution {
    public:
        //13ms
        int longestConsecutive(vector<int>& nums) {
            unordered_set<int>s(nums.begin(),nums.end());
            int res = 0;
            for (auto val : nums){
                if (!s.count(val))  continue;
                int pre = --val,next = ++val;
                while (s.count(pre))    s.erase(pre--);
                while (s.count(next))   s.erase(next++);
                res = max(res,next - pre - 1);
            }
            return res;
        }
    };
    
  • 相关阅读:
    牛逼的博客地址
    动画的keyPath
    跳转到系统设置的各种配置
    UITextField只允许输入正数
    冒泡排序
    number类型的数组
    正则表达式
    C中常用的数学函数
    利用运行时,查看一个类的所有子类
    玉蟾宫(悬线法)
  • 原文地址:https://www.cnblogs.com/ZhaoxiCheung/p/7355536.html
Copyright © 2020-2023  润新知