leetcode_question_128 Longest Consecutive Sequence

来源:互联网 发布:apache ip访问 编辑:程序博客网 时间:2024/06/03 05:33

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.

hash_map: O(n)

int longestConsecutive(vector<int> &num) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        hash_map<int,int> hm;vector<int>::iterator it = num.begin();for(; it != num.end(); ++it)hm[*it]=1;int max = 0;it = num.begin();for(; it != num.end(); ++it){int times = 0;int tmp = *it;hash_map<int,int>::iterator hmit;hmit = hm.find(tmp);while(hmit != hm.end()){++times;hm.erase(hmit);hmit = hm.find(--tmp);}tmp = *it;hmit = hm.find(++tmp);while(hmit != hm.end()){++times;hm.erase(hmit);hmit = hm.find(++tmp);}if(times > max) max = times;}return max;    }

排序:O(nlogn)

int longestConsecutive(vector<int> &num) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        int length = num.size();        if(length < 2) return length;set<int> st;for(int i = 0; i < length; ++i)st.insert(num[i]);set<int>::iterator it = st.begin();int max = 1;int tmpnum = *it;int len = 1;for(++it; it != st.end(); ++it){if(*it == ++tmpnum)++len;else{if(len > max) max = len;len = 1;}tmpnum = *it;}        if(len > max) max = len;return max;    }





原创粉丝点击