• Longest Consecutive Sequence


    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.

    虽然AC, 但仍未达标, O(n)

    class Solution {
    public:
        int longestConsecutive(vector<int> &num) 
        {
            int len = num.size();
            if(len<=1)
                return len;
            sort(num.begin(),num.end());
            int numb=1;
            int tem;
            for(int i=1;i<len;i++)
            {
                tem = 1;
                while(i<len&&(num[i]==num[i-1]+1)||(num[i]==num[i-1]))//这里没有i<len老出错, 哎~
                {
                    if(num[i]==num[i-1])
                    {
                        i++;
                        continue;
                    }
                    tem++;
                    i++;
                }
                if(tem>numb)
                    numb = tem;
            }
            return numb;
        }
    };


    转载一个符合要求的算法hash


    classSolution
    {
    public:
        int longestConsecutive(std::vector<int> &num)
        {
            for(int i = 0; i < num.size(); ++i)
            {
                flags_.insert(num[i]);
            }
                
            int maxLen = 0;
            
            for(int i = 0; i < num.size(); ++i)
            {
                int ascendingMax = FindConsecutiveNumbers(ASCENDING, num[i]);
                int decendingMax = FindConsecutiveNumbers(DECENDING, num[i] - 1);
                
                
                if(ascendingMax + decendingMax > maxLen)
                {
                    maxLen = ascendingMax + decendingMax;
                }
            }
            
            return maxLen;
        }
        
    private:
        enum OrderBy
        {
            ASCENDING,
            DECENDING
        };
        
        int FindConsecutiveNumbers(OrderBy orderBy, int value)
        {
            int maxLen = 0;
            
            while(flags_.find(value) != flags_.end())
            {
                ++maxLen;
                
                flags_.erase(value);
                
                if(orderBy == ASCENDING)
                {
                    ++value;
                }
                else
                {
                    --value;
                }        
            }
            
            return maxLen;
        }
        
        std::unordered_set<int> flags_;
    };
    
    哈希表的实现


    每天早上叫醒你的不是闹钟,而是心中的梦~
  • 相关阅读:
    测网速
    fseek 在以字符串模式打开的文件中工作不正常 [MSDN]
    Inno Setup: Ask for reboot after uninstall
    【Inno Setup】Pascal 脚本 ---- 事件函数
    在安装程序之前,预先安装别的程序
    【Inno Setup】查看是否安装了VC++ 2015 Redistributeable
    spark学习笔记
    docker学习笔记2
    kafka读书笔记《kafka权威指南》2018
    mongodb
  • 原文地址:https://www.cnblogs.com/vintion/p/4116927.html
Copyright © 2020-2023  润新知