LeetCode刷题-最长连续序列

最长连续序列

题目

给定一个未排序的整数数组,找出最长连续序列的长度。

要求算法的时间复杂度为 O(n)。

样例

  • 输入: [100, 4, 200, 1, 3, 2]
    输出: 4
    解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。

Code1

分析
由于序列里的元素是无序的,又要求O(n),采用哈希表。
用一个哈希表记录每个元素是否使用,对每个元素,以该元素为中心,往左右扩张,知道不连续为止,并记录其连续的长度。

时间复杂度O(n),空间复杂度O(n)

int longestConsecutive(vector& nums) {
	unordered_map used;
	for(auto i:nums) {
		used[i]==false;
	}
	int longest=0;
	for(auto i:nums) {
		if(used[i]) {
			continue;
		}
		int length=1;
		used[i]=true;
		for(int j=i+1; used.find(j)!=used.end(); j++) {
			used[j]=true;
			++length;
		}
		for(int j=i-1; used.find(j)!=used.end(); --j) {
			used[j]=true;
			++length;
		}
		longest=max(longest,length);
	}
	return longest;
}

Code2

分析

时间复杂度O(n),空间复杂度O(n)

class Solution {
public:
    int longestConsecutive(vector& nums) {
        unordered_map map;
        int size=nums.size();
        int l=1;
        for(int i=0; i &map, int left, int right){
        int upper=right + map[right] - 1;
        int lower=left-map[left]+1;
        int length=upper-lower+1;
        map[upper]=length;
        map[lower]=length;
        return length;
    }
};

若有疑问可评论交流=_=!

你可能感兴趣的:(LeetCode)