1. 程式人生 > >lintcode-最長連續子序列

lintcode-最長連續子序列

給定一個未排序的整數陣列,找出最長連續序列的長度。

樣例

給出陣列[100, 4, 200, 1, 3, 2],這個最長的連續序列是 [1, 2, 3, 4],返回所求長度 4

給出陣列[ 4, 4, 1, 3,2, 2],這個最長的連續序列是 [1, 2, 3, 4],返回所求長度 4

說明 要求你的演算法複雜度為O(n)

注意:set不能插入相同元素(set的底層實現是紅黑樹),set的插入是平均logm,遍歷過程是n,所以O(nlogm),所以該題並沒有符合要求,執行時間是47ms

class Solution {
public:
   
    int longestConsecutive(vector<int> &num) {
       set<int> s;
       for(auto e:num)
           s.insert(e);
       
       int last=*s.begin();
       s.erase(s.begin());
       int count=1,maxp=1;
       
       for(auto e:s){
           if(last==e-1){
               ++count;
           }else{
               count=1;
           }
           last=e;
           maxp=max(count,maxp);
       }
       return maxp;
    }
};