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.
这道题目要求了o(n)的时间复杂度,其实没有什么特别巧妙的做法,也就是对set容器的使用
int longestConsecutive(vector<int> &num) {
unordered_map<int,int> s;
int maxlen = 0;
for(vector<int>::iterator it = num.begin(); it != num.end(); it++) s[*it] = 1;
//each element in the array can be accessed at most twice,
//therefore the amortized running time is still o(n).
for(vector<int>::iterator it = num.begin(); it != num.end(); it++){
if(s[*it] == 1){
s[*it] = 0;
int len = 1;
int left = *it - 1;
int right = *it + 1;
while(s.find(left) != s.end() && s[left]){
s[left--] = 0;
len++;
}
while(s.find(right) != s.end() && s[right]){
s[right++] = 0;
len++;
}
if(maxlen < len) maxlen = len;
}
}
return maxlen;
}
本文介绍了一种寻找整数数组中最长连续元素序列的算法,并通过使用unordered_map实现了O(n)的时间复杂度。该算法适用于未排序的整数数组,通过查找每个元素的左右邻居来确定连续序列的长度。
905

被折叠的 条评论
为什么被折叠?



