• 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

  • 相关阅读:
    人生应该接受的教育
    【转】俞军给淘宝产品经理的分享
    【转】伪O2O已死?2016年实体零售将迎来真正的O2O
    【转】一个测试工程师的2015总结和2016年小展望
    【转】移动App测试中的最佳做法
    Net作业调度(一) -Quartz.Net入门
    Quartz学习
    Newtonsoft.Json.dll
    用C#实现Base64处理,加密解密,编码解码
    mysql 连接数的最大数
  • 原文地址:https://www.cnblogs.com/yangjiannr/p/7391338.html
Copyright © 2020-2023  润新知