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

LeetCode: Longest Consecutive Sequence

2014-04-16 20:44 302 查看
思路:可以先排序再开始搜索,但是时间复杂度最快要O(nlog(n))。考虑hash方法,将每个元素映射到唯一的一个hash表中,然后再搜索。对于当前元素,查看左右两边是否存在值,如果存在就继续搜索。注意,搜索过的元素可以在hash表中删除,这样能够减少运行时间,因为搜索过的就不必再次进行搜索了。刚开始我没有删除搜索过的元素,所以超时了,更正后可以Accept.

class Solution {
public:
int longestConsecutive(vector<int> &num) {
unordered_map<int,int> f;
int max_v(1);
for(auto val: num)
f[val] = 1;
for(auto val: num){
int left = val - 1, right = val + 1;
while (f[left]){
f[left] = 0;
left--;
}
while(f[right]){
f[right] = 0;
right++;
}
max_v = max(max_v,right-left-1);
}
return max_v;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: