zoukankan      html  css  js  c++  java
  • LeetCode128 Longest Consecutive Sequence

    Given an unsorted array of integers, find the length of the longest consecutive elements sequence. (Hard)

    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)的时间复杂度,所以排序是不能用了。

    用空间换时间,建立一个哈希表。对每一个元素把上下区间求出来,然后从hash表中删除。

    代码:

     1 class Solution {
     2 public:
     3     int longestConsecutive(vector<int>& nums) {
     4         unordered_map<int, bool> hash;
     5         for (int i = 0; i < nums.size(); ++i) {
     6             hash[nums[i]] = true;
     7         }
     8         int result = 1;
     9         for (int i = 0; i < nums.size(); ++i) {
    10             int cur = nums[i];
    11             hash.erase(cur);
    12             int low = cur - 1, high = cur + 1;
    13             while (hash.find(low) != hash.end()) {
    14                 hash.erase(low);
    15                 low--;
    16             }
    17             while (hash.find(high) != hash.end()) {
    18                 hash.erase(high);
    19                 high++;
    20             }
    21             result = max(result, high - low - 1);
    22         }
    23         return result;
    24     }
    25 };
  • 相关阅读:
    电路学习实战分析之mos-2
    我这博客咋分类的?
    学习shell之后,实战分析
    二叉树,二叉排序树,红黑树 学习
    哈希表 学习
    《转》C语言可变参函数的实现
    Linux工具记录
    苏州之旅有感
    git 命令动画学
    软件工程相关博客
  • 原文地址:https://www.cnblogs.com/wangxiaobao/p/6135677.html
Copyright © 2011-2022 走看看