leetcode_question_128 Longest Consecutive Sequence

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.

hash_map: O(n)

int longestConsecutive(vector<int> &num) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        hash_map<int,int> hm;
		vector<int>::iterator it = num.begin();
		for(; it != num.end(); ++it)
			hm[*it]=1;

		int max = 0;
		it = num.begin();
		for(; it != num.end(); ++it)
		{
			int times = 0;
			int tmp = *it;
			hash_map<int,int>::iterator hmit;
			hmit = hm.find(tmp);
			while(hmit != hm.end())
			{
				++times;
				hm.erase(hmit);
				hmit = hm.find(--tmp);
			}
			tmp = *it;
			hmit = hm.find(++tmp);
			while(hmit != hm.end())
			{
				++times;
				hm.erase(hmit);
				hmit = hm.find(++tmp);
			}
			if(times > max) max = times;
		}
		return max;
    }

排序: O(nlogn)

int longestConsecutive(vector<int> &num) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        int length = num.size();
        if(length < 2) return length;

		set<int> st;
		for(int i = 0; i < length; ++i)
			st.insert(num[i]);
		
		set<int>::iterator it = st.begin();
		int max = 1;
		int tmpnum = *it;
		int len = 1;
		for(++it; it != st.end(); ++it)
		{
			if(*it == ++tmpnum)
				++len;
			else{
				if(len > max) max = len;
				len = 1;
			}
			tmpnum = *it;
		}
        if(len > max) max = len;
		return max;
    }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值