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

    题目:

    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.

    题解:

    这道题利用HashSet的唯一性解决,能使时间复杂度达到O(n)。首先先把所有num值放入HashSet,然后遍历整个数组,如果HashSet中存在该值,就先向下找到边界,找的同时把找到的值一个一个从set中删去,然后再向上找边界,同样要把找到的值都从set中删掉。所以每个元素最多会被遍历两边,时间复杂度为O(n)。

    代码如下:

     1     public int longestConsecutive(int[] num) {  
     2         if(num == null||num.length == 0)
     3             return 0;
     4         
     5         HashSet<Integer> hs = new HashSet<Integer>();  
     6         
     7         for (int i = 0 ;i<num.length; i++)   
     8             hs.add(num[i]);  
     9          
    10         int max = 0;  
    11         for(int i=0; i<num.length; i++){  
    12             if(hs.contains(num[i])){
    13                 int count = 1;  
    14                 hs.remove(num[i]);
    15                 
    16                 int low = num[i] - 1; 
    17                 while(hs.contains(low)){  
    18                     hs.remove(low);  
    19                     low--;  
    20                     count++;  
    21                 }
    22                 
    23                 int high = num[i] + 1;  
    24                 while(hs.contains(high)){  
    25                     hs.remove(high);  
    26                     high++;  
    27                     count++;  
    28                 }  
    29                 max = Math.max(max, count);  
    30             }  
    31         }  
    32         return max;  
    33     } 

  • 相关阅读:
    【资料整理】面向对象
    【资料整理】函数(方法)
    【资料整理】数组
    【资料整理】循环、判断、三元表达式
    【资料整理】类型转换、运算符
    【资料整理】c#基础
    线性表的链式表示和实现
    线性表
    PAT 乙级1062最简分数
    HDU 1027(全排列)
  • 原文地址:https://www.cnblogs.com/springfor/p/3869981.html
Copyright © 2011-2022 走看看