Longest Consecutive Sequence

来源:互联网 发布:淘宝破损补寄怎么设置 编辑:程序博客网 时间:2024/06/03 02:25
class Solution {public:    int longestConsecutive(vector<int> &num) {        int n=num.size(),res=1;        if (!n) return 0;        map<int,int> m;        for (int i=0; i<n; i++) {            m[num[i]]=i;        }        vector<int> visited(n,0);        for (int i=0; i<n; i++) {            if (visited[i]) continue;            visited[i]=1;            int temp=num[i]-1, len=1;            while (m.find(temp)!=m.end()) {                len++;                visited[m[temp]]=1;                m.erase(temp);                temp--;            }            temp=num[i]+1;            while (m.find(temp)!=m.end()) {                len++;                visited[m[temp]]=1;                m.erase(temp);                temp++;            }            if(len>res) res=len;        }        return res;    }};

没有加17和25行会超时


因为hash map内是按照key的排序保存的,所以可以简化

class Solution {public:    int longestConsecutive(vector<int> &num) {        int n=num.size(),res=1;        if (!n) return 0;        map<int,bool> m;        for (int i=0; i<n; i++) {            m[num[i]]=true;        }        int tmp = 0, len=1;        for (map<int,bool>::iterator it=m.begin(); it!=m.end(); it++) {            if (it==m.begin()) tmp=it->first;            else {                if (it->first==++tmp) {                    len++;                }else {                    tmp=it->first;                    len=1;                }            }            if(len>res) res=len;        }        return res;    }};


0 0
原创粉丝点击