`

Leetcode - Longest Consecutive Sequence

 
阅读更多
[分析]
base version说几句:
数组题一定要考虑重复重复重复的问题!另外循环结束要记得最后一次更新maxLen
O(N)解法思路请移步http://blog.csdn.net/linhuanmars/article/details/22964467

public class Solution {
    // Method 1: base version, first sort, then scan to find
    public int longestConsecutive1(int[] nums) {
        if (nums == null || nums.length == 0)
            return 0;
        Arrays.sort(nums);
        int len = 1, maxLen = 1;
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] == nums[i - 1])
                continue;
            if (nums[i] == nums[i - 1] + 1) {
                len++;
            } else {
                maxLen = Math.max(maxLen, len);
                len = 1;
            }
        }
        maxLen = Math.max(maxLen, len);
        return maxLen;
    }
    // Method 2: O(n), use hashset
    public int longestConsecutive(int[] nums) {
        if (nums == null || nums.length == 0)
            return 0;
        HashSet<Integer> set = new HashSet<Integer>();
        for (int i = 0; i < nums.length; i++) {
            set.add(nums[i]);
        }
        int maxLen = 0;
        
        while (!set.isEmpty()) {
            Iterator<Integer> iter = set.iterator();
            int item = iter.next();
            set.remove(item);
            int len = 1;
            int i = item - 1;
            while (set.contains(i)) {
                set.remove(i--);
                len++;
            }
            i = item + 1;
            while (set.contains(i)) {
                set.remove(i++);
                len++;
            }
            if (len > maxLen)
                maxLen = len;
        }
        return maxLen;
    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics