首页 > 其他 > 详细

128. Longest Consecutive Sequence

时间:2018-11-06 10:47:34      阅读:98      评论:0      收藏:0      [点我收藏+]
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
Your algorithm should run in O(n) complexity.
Example:
Input: [100, 4, 200, 1, 3, 2]
Output: 4
Explanation: The longest consecutive elements sequence is [1, 2, 3, 4]. Therefore its length is 4.






//solution 1 : time  nlogn (sorting )

class Solution {
    public int longestConsecutive(int[] nums) {
      if(nums.length <= 1){
        return nums.length;
      } 
 
    
      Arrays.sort(nums);
      
      int[] count = new int[nums.length];
      
      for(int i= 0; i < nums.length; i++){
        count[i] = 1;
      }
      
      int max = 0;
      for(int i = 1; i < nums.length; i++){
        if(nums[i] - 1 == nums[i-1]){
          count[i] = count[i-1] + 1;
        }else if(nums[i] == nums[i-1]){
          count[i] = count[i-1];
        }
        max = Math.max(max, count[i]);
      }
      return max;
    }
}



//  solution 2 : time O(n)
class Solution {
    public int longestConsecutive(int[] nums) {
        if(nums == null || nums.length == 0) return 0;
        // put every element into a set 
        // suppose every num is the start of the consecutive sequence
        // check if current element + 1, + 2 .. exists in the set or not 
        // update the res 
        int res = 1;
        HashSet<Integer> set = new HashSet<>();
        for(int num : nums) set.add(num);
        for(int i = 0; i < nums.length; i++){
            int num = nums[i];
            int len = 1;
            while(set.contains(num + 1)){
                len++;
                num += 1;
            }
            res = Math.max(res, len);    
        }
        return res;
    }
}

 

128. Longest Consecutive Sequence

原文:https://www.cnblogs.com/tobeabetterpig/p/9913069.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!