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

  • 相关阅读:
    Android_AsyncTask
    table隔行变色【转】
    添加对WCF的调用(内网状态下)。
    【转】IDEA 2017破解 license server激活
    C# LIst去重
    框架内事务的近期发现,以后再研究
    启动、停止、删除Windows服务
    软件项目总结中的经验总结
    iis最大连接数和队列长度
    在一个千万级的数据库查寻中,如何提高查询效率?
  • 原文地址:https://www.cnblogs.com/yangjiannr/p/7391338.html
Copyright © 2011-2022 走看看