leetcode之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.
题意
给定一个integers类型的数组,求出这个数组中,连续元素最长的长度是多少?
例如:
[100, 4, 200, 1, 3, 2]这个数组的最长连续元素时 1,2,3,4。则它的最长长度是4;
现在要求给出一个时间复杂度在O(n)的解法,给定一个数组吗,返回连续元素最长长度。
思路
这里要求时间复杂度在O(n),所以绝对不能使用排序去做,这里有个方法就是可以通过HashSet去做:
1、将所有元素都丢入set中;
2、然后逐个遍历整个vector内的元素;
3、如果这个元素可以找到,则将该元素从set中删除,并求这个数相邻的数是否在这个set内(即i-1,,i+1);
4、直到找不到为止,就记录下本次这个set里 该连续元素的长度,即 右边数-左边数+1;
5、循环以上步骤,直至遍历完所有的vector内元素,找出最大的那个长度,返回既可;
C++实现代码
class Solution {
public:
int longestConsecutive(vector<int> &num) {
set<int> set(num.begin(),num.end());
int result=1;
for(int i:num){
if(set.find(i)==set.end())
continue;
set.erase(i);
int l=i-1;
int r=i+1;
while(set.find(l)!=set.end()){
set.erase(l);
l--;
}
while(set.find(r)!=set.end()){
set.erase(r);
r++;
}
result = max(result,r-l-1);
}
return result;
}
};