Longest Consecutive Sequence
题目详情:
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.
解题方法:
维护一个set,首先将vector中的所有元素插到set中。然后遍历vector中的所有元素,如果在set中能找到,则接着找比这个元素连续小的数,直到找不到为止,同时页找比这个元素连续大的数,直到找不到为止。这样这个与这个元素构成连续序列的大小就是最大的减最小的减一。在找到连续序列的最大值就好了。
代码详情:
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
int result = 0;
set<int> s;
for (int i = 0; i < nums.size(); i++) {
s.insert(nums[i]);
}
for (int i = 0; i < nums.size(); i++) {
if (!s.count(nums[i])) continue;
s.erase(nums[i]);
int pre = nums[i]-1;
int next = nums[i]+1;
while (s.count(pre)) {
s.erase(pre);
pre--;
}
while (s.count(next)) {
s.erase(next);
next++;
}
result = max(result, next-pre-1);
}
return result;
}
};