zoukankan      html  css  js  c++  java
  • 面试题40:数组中最长的连续序列的长度

      这道题是一个比较简单的题目,由于题目中要求O(n),限制使用排序,所有借用hash表unordered_set<int> s来存储数组中元素,保证O(n)的时间复杂度。

    题目:

    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.

     1 class Solution {
     2 public:
     3     int longestConsecutive(vector<int> &num) {
     4         unordered_set<int> s(num.begin(),num.end());
     5 
     6         int res = 0;
     7         for(int n : num){
     8             if(s.find(n) != s.end()){
     9                 s.erase(n);
    10                 int pre = n - 1;
    11                 int post = n + 1;
    12                 while(s.find(pre) != s.end()){
    13                     s.erase(pre--);
    14                 }
    15                 while(s.find(post) != s.end()){
    16                     s.erase(post++);
    17                 }
    18                 res = max(res,post-pre-1);
    19             }
    20         }
    21         return res;
    22     }
    23 };
  • 相关阅读:
    HTML5中的canvas
    预解释
    asp.net中的CheckBox控件的使用
    jQuery 效果
    常用的 jQuery 事件
    轮播图
    迭代器与生成器
    js对象拷贝
    事件循环、同步异步、宏任务微任务
    Vue 的 keep-alive 组件缓存
  • 原文地址:https://www.cnblogs.com/wxquare/p/6949907.html
Copyright © 2011-2022 走看看