zoukankan      html  css  js  c++  java
  • LeetCode "Longest Consecutive Sequence"

    Comparison-based sorting takes O(nlgn), so hashset is a good idea. After keeping records of all numbers in the hashset, you start checking each number. If it is isolated (no n-1 nor n+1) that number will be removed from hashset; If not isolated, we do a BFS scanning. Since each number is only checked once, it is O(n) with 2 passes.

    class Solution {
    public:
        int longestConsecutive(vector<int> &num) {
            unordered_set<int> rec;
             
            for (int i : num )         
                if(rec.find(i) == rec.end())    rec.insert(i);
            
            int cnt = 1, currcnt = 0;
            while(!rec.empty())
            {
                int i = *rec.begin();
                if( (rec.find(i - 1) == rec.end()) && 
                    (rec.find(i + 1) == rec.end()) )
                {
                    rec.erase(i);
                    continue;
                }
    
                queue<int> q; q.push(i);
                while(!q.empty())
                {
                    int n = q.front();
                    currcnt ++;
                    q.pop(); rec.erase(n);
                    if(rec.find(n - 1) != rec.end()) q.push(n - 1);
                    if(rec.find(n + 1) != rec.end()) q.push(n + 1);
                }
                cnt = std::max(currcnt, cnt);
                currcnt = 0;            
            }
            return cnt;
        }
    };
  • 相关阅读:
    进行代码复审训练
    源代码管理工具调查
    软工作业PSP与单元测试训练
    P18 第四题
    开学第一课
    进行代码复审训练
    源代码管理工具调查
    软工 任务2
    软工课后作业01 P18第四题
    课堂作业1--自我介绍
  • 原文地址:https://www.cnblogs.com/tonix/p/3866923.html
Copyright © 2011-2022 走看看