1.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.
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),所以先排序的思想倍pass掉了,数组中的元素是无序的,我们可以使用我们上文中的介绍的hash_map,用数组构建一个hash_map,用空间来换取时间。因为对于 给定数组中的任意一个值,我们都可以在hash_map中以o(1)的时间找到它,并且可以看它旁边的元素是否存在于原先的数组中。
代码:
int longestConsecutive(vector<int> &num) {
unordered_map< int, bool > used;
for( auto i : num ) used[ i ] = false;//初始为false
int longNumber = 0;
for( auto i : num ){
if( used[ i ] ) //如果存在则为0,不存在则为1,为真表示已经验证过了这个值
continue;
int longgest = 1;
used[ i ] = true; //标记为true,如果vector中有相同元素则只标记一遍
for( int j = i + 1; used.find( j ) != used.end(); j++ ){
longgest++;
used[ j ] = true;
}
for( int j = i - 1; used.find( j ) != used.end( ); j-- ){
longgest++;
used[ j ] = true;
}
longNumber = max( longgest, longNumber );
}
return longNumber;
}