描述
现在有一个没有排序的数组,在这个数组中找到最长的连续数字。
例如:数组[100, 4, 200, 1, 3, 2, 5],最长的连续元素是[1, 2, 3, 4, 5],长度为5。
分析
数组是无序的,在无序数组里查找最长元素,可以借助哈希表,用一个哈希表记录每个元素是否被使用,对于没一个元素,以此元素为起点,分别向左,向右判断是否有此数字,直到不存在未知,记录下最长的长度。
int findTheLongestConsecutiveSequence(int A[], int n)
{
std::unordered_map<int, bool> used;
int longestLen = 0;
for (int i=0; i<n; ++i) {
used[A[i]] = false;
}
for(int i=0; i<n; i++) {
if (used[A[i]]) {
continue;
}
int len = 1;
used[A[i]] = true;
// 向右寻找数字
for (int j=A[i]+1; used.find(j)!=used.end(); j++) {
used[j] = true;
++len;
}
//向左寻找数组
for(int j=A[i]-1; used.find(j)!=used.end(); j--) {
used[j] = true;
++len;
}
longestLen = std::max(longestLen, len);
}
return longestLen;
}
网友评论