zoukankan      html  css  js  c++  java
  • [Leetcode] 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.

    Solution:

    排序的话至少要O(nlgn) 的复杂度。O(n)的复杂度,目前只找到了使用hash来解决的方案,add, remove, contains 等方法的复杂度都是 O(1),因此两次遍历的操作复杂度为 O(n)。

    public class Solution {
        public int longestConsecutive(int[] num) {
            if(num==null||num.length==0)
                return 0;
            HashSet<Integer> hs=new HashSet<Integer>();
            for(int i:num){
                hs.add(i);
            }
            int max=1;
            for(int e:num){
                int left=e-1;
                int right=e+1;
                int temp=1;
                while(hs.contains(left)){
                    hs.remove(left);   //其实就相当于把num数组给group掉,每个元素只被走了一遍
                    temp++;
                    left--;
                }
                while(hs.contains(right)){
                    hs.remove(right);  //同上
                    right++;
                    temp++;
                }
                max=Math.max(max, temp);
            }
            return max;
        }
    }
  • 相关阅读:
    请教提高上百万行数据insert速度的“经典”方法
    poj1411
    poj1422
    poj1661
    poj1664
    poj1405
    交往艺术与沟通技巧[推荐]
    不可不听的10个职场故事
    也谈如何“领导”你的领导
    十个让爱情稳固的经典好习惯
  • 原文地址:https://www.cnblogs.com/Phoebe815/p/4137099.html
Copyright © 2011-2022 走看看