Leetcode 128 最长连续序列
Posted 不搞事情和咸鱼有什么区别
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 128 最长连续序列相关的知识,希望对你有一定的参考价值。
题目描述:给定一个未排序的数组,找出最长连续序列的长度。要求算法的时间复杂度为o(n)。
题解:
暴力求解很容易想到:枚举每个数字作为序列的第一个数字,搜索所有的可能性。
但是并不是每个枚举都是有意义的,例如[1,3,4,2,5,6,8]。这里只对1,8枚举有意义,剩下的元素都不是最长连续序列候选片段的起始点。
抓住这个规律就可以把时间复杂度拉下来了。(这里用unordered_map,无序的map,底层的实现为hash表,空间换时间)。
AC代码:
class Solution { public: int longestConsecutive(vector<int>& nums) { unordered_map<int,int> mp; int Len = nums.size(); for(int i=0;i<Len;i++) mp[nums[i]] = 1; int ans = 0; for(int i = 0;i<Len;i++) { if(mp.find(nums[i]-1) == mp.end()) { int tmp = nums[i]; while(mp.find(tmp) != mp.end()) { tmp++; } ans = max(ans,tmp-nums[i]); } } return ans; } };
以上是关于Leetcode 128 最长连续序列的主要内容,如果未能解决你的问题,请参考以下文章