码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 128 最长连续序列

时间:2020-03-10 11:53:47      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:return   stc   hash表   int   暴力求解   red   连续序列   ash   数字   

题目描述:给定一个未排序的数组,找出最长连续序列的长度。要求算法的时间复杂度为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 最长连续序列

标签:return   stc   hash表   int   暴力求解   red   连续序列   ash   数字   

原文地址:https://www.cnblogs.com/z1141000271/p/12454530.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!