zoukankan      html  css  js  c++  java
  • LeetCode 128. Longest Consecutive Sequence

    Description

    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.

    my program

    思路:如果允许O(nlogn)的复杂度,那么可以先排序,可是本题要求O(n)
    由于序列里的元素是无序的,又要求O(n),首先要想到用哈希表。

    方法一

    先排序,然后遍历找出最长递归序列;时间复杂度为O(nlogn)

    class Solution {
    public:
        int longestConsecutive(vector<int>& nums) {
            if(nums.empty()) return 0;
            sort(nums.begin(), nums.end());
            int max = 1;
            int count = 1;
            for(int i = 1; i<nums.size(); i++)
            {
                if(nums[i] == nums[i-1])
                    continue;
                if((nums[i]-1) == nums[i-1])
                    count++;
                else
                    count = 1;
                if(max < count)
                    max = count;
            }
            return max;
        }
    };

    Submission Details
    68 / 68 test cases passed.
    Status: Accepted
    Runtime: 13 ms

    方法二

    用哈希表, 时间复杂度为O(n)

    class Solution {
    public:
        int longestConsecutive(vector<int>& nums) {
            if(nums.empty()) return 0;
            map<int,int> m1;
            int max = 1;
            int i = 0;
            for(; i<nums.size(); i++)
            {
                m1[nums[i]] = i;
            }
            while(!m1.empty())
            {
                int count = 1;
                i = m1.begin()->first;
                while(m1.find(i+1) != m1.end())
                {
                    m1.erase(i+1);
                    count++;
                    i++;
                }
    
                i = m1.begin()->first;
                while(m1.find(i-1) != m1.end())
                {
                    m1.erase(i-1);
                    count++;
                    i--;
                }
                m1.erase(m1.begin());
                if(max < count)
                    max = count;
            }
            return max;
        }
    };

    Submission Details
    68 / 68 test cases passed.
    Status: Accepted
    Runtime: 9 ms

  • 相关阅读:
    在Windows环境下搭建redis
    三种主流的Web服务实现方案(REST+SOAP+XML-RPC)简述及比较
    ASP.NET Web API身份验证和授权
    quartz 设置时间格式
    服务端发post请求产生的编码问题
    大型网站的灵魂——性能
    大型网站系统架构的演化
    c# url自动解码解决方案
    C# RSA非对称加密实现
    .net上传图片之使用第三方平台七牛上传图片接口
  • 原文地址:https://www.cnblogs.com/yangjiannr/p/7391338.html
Copyright © 2011-2022 走看看