zoukankan      html  css  js  c++  java
  • LeetCode: Longest Consecutive Sequence [128]

    【题目】

    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.


    【题意】

        给定一个未排序的整数数组。找长度最长的连续整数串序列。并返回长度。 复杂度要求O(n)


    【思路】

        O(n)不一定是one pass, 脑子里总是有这么种固定思维,自己给自己挖了个坑。O(kn)也是O(n), 仅仅要k是常数。
        要找连续串,又不能排序,那我们要构造一个类列表结构把连续的数串起来。

    那么怎么串呢?非常显然,给定一个数N。那我们须要知道他的前一个数prev和它的后一个数next是否存在,假设存在我们就能够串到prev或者next, 假设不存在则连续串就结束鸟。我们用一个map来表示这样的前后继关系。
        prev=N-1; next=N+1; 假定N是存在于数组中的。则map[N]=1
        假设prev也在数组中,则map[prev]=1, 否则map[prev]=0
        假设next也在数组中,则map[next]=1, 否则map[next]=0
        
        我们对数组进行两遍扫描:
        第一遍扫描是我们生成前后关系map
        第二遍扫描利用前后关系恢复连续串,恢复过程中相应数的map[i]都置为0,避免反复恢复

        


    【代码】

    class Solution {
    public:
        int longestConsecutive(vector<int> &num) {
            int size=num.size();
            if(size==0)return 0;
            
            //第一遍扫描建立前后关系map
            map<int, int> exist;
            for(int i=0; i<size; i++){
                exist[num[i]]=1;
                if(exist[num[i]-1]!=1)exist[num[i]-1]=0;
                if(exist[num[i]+1]!=1)exist[num[i]+1]=0;
            }
            
            //第二遍扫描
            int maxLength=0;
            for(int i=0; i<size; i++){
                if(exist[num[i]]==1){
                    //恢复串
                    int length=1;
                    int number=num[i]-1;
                    while(exist[number]==1){length++; exist[number]=0; number--;}
                    number=num[i]+1;
                    while(exist[number]==1){length++; exist[number]=0; number++;}
                    if(length>maxLength)maxLength=length;
                }
            }
            return maxLength;
        }
    };


  • 相关阅读:
    使用WCF实现消息推送
    T31P电子秤数据读取
    持续性任务代码的一些测试
    XP+Android手机DIY家庭视频点播系统-历时3周全力打造吊丝的幸福生活
    Android 上传文件到XP
    Android ListView的一个坑,你可掉进去过?
    无脑无负担网站架构-- Application Request Route的一些应用
    Android 一些注意
    懒人的ERP开发框架--2B&苦B程序员专用
    PHP Token(令牌)设计应用
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5316687.html
Copyright © 2011-2022 走看看