zoukankan      html  css  js  c++  java
  • [leetcode]Longest Consecutive Sequence

    找一个没排序的数组的最长连续块是多长

    第一想法,排序,遍历就ok。。。

    但是要求时间复杂度是O(n)

    想了几分钟TAT

    用hash记录每个数字啊。。。

    然后枚举就好了。。

    数字为n的时候扫描其左右两边时候有连续的数字

    如果有就从hash删掉。。继续。。。直到没有。。。记录长度

    class Solution {
    public:
        int longestConsecutive(vector<int> &num) {
           int size = num.size();
           if( size == 0 ) return 0;
           unordered_set<int> st;
           int ans = 1;
           
           for(int i = 0 ; i < size ; i++)
            st.insert(num[i]);
            
        
           for(int i = 0 ; i < size ; i++)
           {
               int n = num[i];
               int tmp = 1;
               //left
               st.erase(n);
               while(st.find(n - 1) != st.end()){
                   tmp ++;
                   n--;
                   st.erase(n);
               }
               n = num[i];
               while(st.find(n + 1) != st.end()){
                   tmp ++;
                   n++;
                   st.erase(n);
               }
               
               if(tmp > ans) ans = tmp;
           }
           return ans;
        }
    };
  • 相关阅读:
    Models(Pascal)
    Summer Plan(挖坑待填)
    C++之指针
    QuickPower快速幂
    codevs 1231最优布线问题
    颓废了1年+,今天开始勤(tui)奋(fei)啦
    l'Hopital法则
    相律
    小意外
    一种改进的动力学处理方法
  • 原文地址:https://www.cnblogs.com/x1957/p/3496237.html
Copyright © 2011-2022 走看看