[leetcode]Longest Consecutive Sequence

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.

 

class Solution {
public:
    int longestConsecutive(vector<int> &num) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        unordered_set<int> hash;
        
        for(int i = 0; i < num.size(); i++){
            hash.insert(num[i]);
        }
        
        unordered_set<int>::iterator it;
        int result = 0;
        int tmp_elem;
        int cnt;
        unordered_set<int>::iterator tmp_it;
        
        while(!hash.empty()){
            cnt = 1;
            it = hash.begin();
            
            int elem = *it;
            hash.erase(it);
            
            tmp_elem = elem + 1;
            while((tmp_it = hash.find(tmp_elem)) != hash.end()){
                cnt++;
                tmp_elem++;
                hash.erase(tmp_it);
            }
 
            tmp_elem = elem - 1;
            while((tmp_it = hash.find(tmp_elem)) != hash.end()){
                cnt++;
                tmp_elem--;
                hash.erase(tmp_it);
            }
            result = max(result, cnt);
            
        }
        
        return result;
        
    }
};


原文地址:https://www.cnblogs.com/snake-hand/p/3157410.html