美文网首页
Longest Consecutive Sequence

Longest Consecutive Sequence

作者: 瞬铭 | 来源:发表于2020-05-08 12:09 被阅读0次

    https://leetcode.com/problems/longest-consecutive-sequence/
    给定一个int无序数组,求数组内部连续数字的最长长度
    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.

    本题题目要求时间复杂度是O(N)
    如果排除这个条件,可以用排序O(NLogN),然后找最长连续数字

    O(N)解法

    public int longestConsecutive(int[] nums) {
            Set<Integer> set = new HashSet<Integer>();
    
            for (int num : nums) {
                set.add(num);
            }
    
            int longestStreak = 0;
    
            for (int num : set) {
    
                //如果set里面有num-1,那么这个num一定不是最长序列的起始数字
                if (set.contains(num - 1)) {
                    continue;
                }
    
                //找到起始数字
                int currentNum = num;
                int currentStreak = 1;
    
                while (set.contains(currentNum + 1)) {
                    currentNum += 1;
                    currentStreak += 1;
                }
                longestStreak = Math.max(longestStreak, currentStreak);
            }
            return longestStreak;
        }
    

    解法二

    • 依旧是HashSet,遍历HashSet
    • 发现set中有,遍历pre和next,确定连续子串的长度
    • 维护一个结果集res,保证这个res是长度的最小值
    public int longestConsecutive2(int[] nums) {
            int res = 0;
            Set<Integer> hashSet = new HashSet<Integer>();
            for (int num : nums) {
                hashSet.add(num);
            }
    
            for (int num : nums) {
                // 如果有当前num,remove
                if (hashSet.remove(num)) {
                    int pre = num - 1, next = num + 1;
                    while (hashSet.remove(pre)) {
                        pre--;
                    }
                    while (hashSet.remove(next)) {
                        next++;
                    }
                    res = Math.max(res, next - pre - 1);
                }
            }
            return res;
        }
    

    相关文章

      网友评论

          本文标题:Longest Consecutive Sequence

          本文链接:https://www.haomeiwen.com/subject/ngxfnhtx.html