[Leetcode]Longest Consecutive Sequence

来源:互联网 发布:数据库管理软件做什么 编辑:程序博客网 时间:2024/04/25 00:29

思路:要求O(N),无法使用排序,一般都需要用到哈希。我们现在遍历输入元素的时候,如果可以很快的找到其前一个和后一个数(对于3来说是2和4),那么我们只要向前和向后遍历即可,为了防止重复遍历可以标记已经访问过的元素。

class Solution {public:    int longestConsecutive(vector<int> &num) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        unordered_set<int> arr;        int ret = 1;        for(vector<int>::size_type i = 0; i < num.size(); ++i)            arr.insert(num[i]);        for(vector<int>::size_type i = 0; i < num.size(); ++i)        {            if(arr.count(num[i]) == 0) continue;            int ans = 1;            int next = num[i] - 1;            while(arr.count(next) != 0)            {                arr.erase(next--);                ans++;            }            next = num[i] + 1;            while(arr.count(next) != 0)            {                arr.erase(next++);                ans++;            }            arr.erase(num[i]);            ret = max(ans, ret);        }        return ret;    }};


原创粉丝点击