Longest Consecutive Sequence

思路:
这是leetcode hard的难度。利用hashset的离散属性,可以在O(n)的时间下完成。
1. 把所有数加到hashset里面。
2. 遍历数组,找到sub sequence的起始点,也就是!set.contains(n-1)。然后再看比它大1的数在不在set里面,更新current longest count。

代码如下:

 public class Solution {  
   /*  
    * @param num: A list of integers  
    * @return: An integer  
    */  
   public int longestConsecutive(int[] num) {  
     // write your code here  
     if(num == null || num.length == 0)  
       return 0;  
     int longest = 0;  
     Set<Integer> set = new HashSet<>();  
     // add each number to set  
     for(int n: num) {  
       set.add(n);  
     }  
     for(int n: num) {  
       if(!set.contains(n-1)) {  
         int current = 1;  
         while(set.contains(++n)) {  
           current++;  
         }  
         longest = Math.max(longest, current);  
       }  
     }  
     return longest;  
   }  
 }  

评论

此博客中的热门博文

776. Split BST

663. Equal Tree Partition

532. K-diff Pairs in an Array