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.
map<int, int> mp; int longestConsecutive(vector<int> &num) { int i; // map all the numbers and set value to 1 (not accessed state) for (i = 0; i < num.size(); i++) { mp[num[i]] = 1; } int res = 0; for (i = 0; i<num.size(); i++){ int sum = 1; if (mp.count(num[i])) { mp[num[i]] = 0; int left = num[i] - 1; // if the left number exist in the map and not accessed while (mp.count(left) && mp[left] != 0) { mp[left--] = 0; sum++; } int right = num[i] + 1; // if the right member exist in the map and not accessed while (mp.count(right) && mp[right] != 0) { mp[right++] = 0; sum++; } } if (res<sum) res = sum; } return res; };
int _tmain(int argc, _TCHAR* argv[]) { Solution *sln = new Solution(); vector<int> svec; svec.push_back(100); svec.push_back(4); svec.push_back(200); svec.push_back(3); svec.push_back(101); svec.push_back(2); svec.push_back(3); svec.push_back(99); svec.push_back(2); svec.push_back(98); svec.push_back(96); svec.push_back(97); int ret = sln->longestConsecutive(svec); cout << ret << endl; return 0; }
Longest Consecutive Sequence,布布扣,bubuko.com
原文地址:http://www.cnblogs.com/pengpenghappy/p/3864157.html