3. 最长连续序列

2024-01-13  本文已影响0人  努力生活的西鱼
  • 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度
  • 请你设计并实现时间复杂度为 O(n) 的算法解决此问题
class Solution {
    public int longestConsecutive(int[] nums) {

        // 检查数组是否为空,长度为0
        if(nums == null || nums.length == 0) {
            return 0;
        }

        // 将数组中的元素放到哈希集合中
        HashSet<Integer> numSet = new HashSet<>();
        for(int num : nums) {
            numSet.add(num);
        }

        int longestStreak = 0;

        for(int num : numSet) {
            // 检查是否是序列的第一个元素
            if(!numSet.contains(num - 1)) {
                int currentNum = num;
                int currentStreak = 1;

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

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

        return longestStreak;

    }
}

在这个示例中,我们首先检查了输入数组是否为空或长度为零,如果是,则直接返回 0。然后我们创建了一个哈希集合,并将数组中的所有元素添加到集合中。接着,我们遍历集合中的每个元素,只有当该元素不是某个连续序列的一部分时(即其前一个数不在集合中),才开始从该元素出发查找最长的连续序列,并更新最长序列的长度。最后返回找到的最长连续序列的长度

上一篇 下一篇

猜你喜欢

热点阅读