LeetCode: Longest Consecutive Sequence [128]

來源:互聯網
上載者:User

標籤:leetcode   演算法   面試   

【題目】

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.


【題意】

    給定一個未排序的整數數組,找長度最長的連續整數串序列,並返回長度。 複雜度要求O(n)


【思路】

    O(n)不一定是one pass, 腦子裡總是有這麼種固定思維,自己給自己挖了個坑。O(kn)也是O(n), 只要k是常數。
    要找連續串,又不能排序,那我們要構造一個類列表結構把連續的數串起來。那麼怎麼串呢?很顯然,給定一個數N,那我們需要知道他的前一個數prev和它的後一個數next是否存在,如果存在我們就可以串到prev或者next, 如果不存在則連續串就結束鳥。我們用一個map來表示這種前後繼關係。
    prev=N-1; next=N+1; 假定N是存在於數組中的,則map[N]=1
    如果prev也在數組中,則map[prev]=1, 否則map[prev]=0
    如果next也在數組中,則map[next]=1, 否則map[next]=0
    
    我們對數組進行兩遍掃描:
    第一遍掃描是我們產生前後關係map
    第二遍掃描利用前後關係恢複連續串,恢複過程中對應數的map[i]都置為0,避免重複恢複

    


【代碼】
class Solution {public:    int longestConsecutive(vector<int> &num) {        int size=num.size();        if(size==0)return 0;                //第一遍掃描建立前後關係map        map<int, int> exist;        for(int i=0; i<size; i++){            exist[num[i]]=1;            if(exist[num[i]-1]!=1)exist[num[i]-1]=0;            if(exist[num[i]+1]!=1)exist[num[i]+1]=0;        }                //第二遍掃描        int maxLength=0;        for(int i=0; i<size; i++){            if(exist[num[i]]==1){                //恢複串                int length=1;                int number=num[i]-1;                while(exist[number]==1){length++; exist[number]=0; number--;}                number=num[i]+1;                while(exist[number]==1){length++; exist[number]=0; number++;}                if(length>maxLength)maxLength=length;            }        }        return maxLength;    }};


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.