Longest Consecutive Sequence

来源:互联网 发布:新手开淘宝店怎么装修 编辑:程序博客网 时间:2024/06/05 17:29

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.


题目解析:

(1)这里主要用到了unordered_set的数据结构 他将数组的元素机型hash,因此有很快的访问速度。

(2)针对每一个元素查找它左右的元素,并将他们从集合中去除。这样每个元素都可以得到针对这个元素的连续序列的长度。

(3)在所有连续中挑选一个最长的就可以了。


#include <iostream>#include <vector>#include <unordered_set>using namespace std;int longestConsecutive(vector<int> &num) {unordered_set<int> map;for(unsigned int i=0;i<(int)num.size();i++){map.insert(num[i]);}int longest = 0;for(int i=0;i<(int)num.size();i++){if(map.find(num[i]) == map.end())continue;map.erase(num[i]);int subSeq = 1;int n = num[i]-1;while(map.find(n)!=map.end()){subSeq++;map.erase(n);n--;}n = num[i]+1;while(map.find(n)!=map.end()){subSeq++;map.erase(n);n++;}if(longest < subSeq)longest = subSeq;}return longest;}int  main(void){vector<int> num;num.push_back(100);num.push_back(4);num.push_back(200);num.push_back(1);num.push_back(3);num.push_back(2);cout << longestConsecutive(num) << endl;system("pause");return 0;}


0 0
原创粉丝点击