您的位置:首页 > 产品设计 > UI/UE

128. Longest Consecutive Sequence

2016-12-09 21:28 351 查看
第一种方法是利用set,然后以每个元素为中心,向两边扩散计算最长的连续子序列。算法复杂度为O(n)

class Solution {
public:
int longestConsecutive(vector<int>& nums) {
int res = 0;
unordered_set<int> s(nums.begin(), nums.end());
for(int val : nums)
{
if(!s.count(val)) continue;
s.erase(val);
int pre = val-1, next = val+1;
while(s.count(pre)) s.erase(pre--);
while(s.count(next)) s.erase(next++);
res = max(res, next-pre-1);
}
return res;

}
};


第二种方法是利用hash表,将每个元素逐个插入表中,然后更新表中连续元素的数量,以一个元素为中心,向两边扩张。

class Solution {
public:
int longestConsecutive(vector<int>& nums) {
int res = 0;
unordered_map<int, int> m;
for(int d : nums)
{
if(!m.count(d))
{
int left = m.count(d-1) ? m[d-1] : 0;
int right = m.count(d+1) ? m[d+1] : 0;
int sum = left+right+1;
m[d] = sum;
res = max(res, sum);
m[d-left] = sum;
m[d+right] = sum;

}
}
return res;

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: