[leetcode]Longest Consecutive Sequence

找一个没排序的数组的最长连续块是多长

第一想法,排序,遍历就ok。。。

但是要求时间复杂度是O(n)

想了几分钟TAT

用hash记录每个数字啊。。。

然后枚举就好了。。

数字为n的时候扫描其左右两边时候有连续的数字

如果有就从hash删掉。。继续。。。直到没有。。。记录长度

class Solution {
public:
    int longestConsecutive(vector<int> &num) {
       int size = num.size();
       if( size == 0 ) return 0;
       unordered_set<int> st;
       int ans = 1;
       
       for(int i = 0 ; i < size ; i++)
        st.insert(num[i]);
        
    
       for(int i = 0 ; i < size ; i++)
       {
           int n = num[i];
           int tmp = 1;
           //left
           st.erase(n);
           while(st.find(n - 1) != st.end()){
               tmp ++;
               n--;
               st.erase(n);
           }
           n = num[i];
           while(st.find(n + 1) != st.end()){
               tmp ++;
               n++;
               st.erase(n);
           }
           
           if(tmp > ans) ans = tmp;
       }
       return ans;
    }
};
原文地址:https://www.cnblogs.com/x1957/p/3496237.html