128. Longest Consecutive Sequence(最长连续序列)

题目链接:https://leetcode.com/problems/longest-consecutive-sequence/

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.

思路一:先sort再查找 

AC 4ms:

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

思路二:用Set

class Solution {
    public int longestConsecutive(int[] nums) {
        if(nums.length==0||nums.length==1)
            return nums.length;
        int maxLen=1;
        Set<Integer> set=new HashSet();
        for(int i=0;i<nums.length;i++){
            set.add(nums[i]);
        }
        for(int i:set){
            if(!set.contains(i-1)){
                int count=1;
                while(set.contains(i+1)){
                    i++;
                    count++;
                }
                maxLen=Math.max(maxLen,count);
            }
        }
        return maxLen;
    }
}

猜你喜欢

转载自blog.csdn.net/God_Mood/article/details/89281029