题目:
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),而元素的序列又是无序的,故想到采用hash表,牺牲空间换取时间。 定义一个unordered_map <int,bool> used 哈希表,使用其bool值记录元素是否被记录, 且以该>元素为中心在hash表中查找与其值相邻的元素,直到不连续,记录下长度。
代码实现:
class Solution {
public:
int longestConsecutive(
vector<int>& nums) {
unordered_map<int ,bool> used;
for (
auto i : nums)
{
nums[i]=
false;
}
int longest=
0;
for(
auto i: nums)
{
if(nums[i])
continue;
int length=
1;
used[i]=
true;
for(
int j=i+
1;used.find(j)!=used.end();j++)
{
nums[j]=
true;
length++;
}
for(
int j=i-
1;used.find(j)!=used.end();j--)
{
nums[j]=
true;
length++;
}
longest=max(longest,length);
}
return longest;
}
};
转载请注明原文地址: https://ju.6miu.com/read-40031.html