leetcode 力扣 128 最长连续序列

69 阅读1分钟

令人困惑的题目,题目意思是数值上连续的序列,不要求位置和顺序上连续,但是不能重复

所以可以先用HashSet去重,然后寻找序列的开头。遍历每一个元素num,如果存在num - 1,说明它不是开头,找下一个,直到找到开头,也就是没有“过往”的那一个num。接着num + 1找出最长连续序列即可。

为什么要找“开头”?因为可以避免重复统计。比如,341234都是同一序列,就重复计算了

public int longestConsecutive(int[] nums) {
        Set<Integer> nums_set = new HashSet<>();
        for (int num : nums) {
            nums_set.add(num);
        }

        int longestStreak = 0;

        for (int num : nums_set) {
            if (!nums_set.contains(num - 1)) {
                int currentNum = num;
                int currentStreak = 1;

                while (nums_set.contains(currentNum + 1)) {
                    currentNum += 1;
                    currentStreak += 1;
                }

                longestStreak = Math.max(longestStreak, currentStreak);
            }
        }

        return longestStreak;
    }