LeetCode: Longest Consecutive Sequence

思路:可以先排序再开始搜索,但是时间复杂度最快要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;
    }
};


你可能感兴趣的:(LeetCode: Longest Consecutive Sequence)