zoukankan      html  css  js  c++  java
  • 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;
        }
    };
  • 相关阅读:
    10 给予scrapy-redis的分布式爬虫
    pandas 01 序列和数据库昂
    如何控制分布式爬虫结束
    动态导入模块
    docker
    09 scrapy中间件
    scrapy 获取settings中的内容
    session对象的cookies
    文本检测-1-MSER
    CTW1500数据集介绍
  • 原文地址:https://www.cnblogs.com/z1141000271/p/12454530.html
Copyright © 2011-2022 走看看