128最长连续序列

发布于:2025-02-16 ⋅ 阅读:(25) ⋅ 点赞:(0)

解决思路:用hashset存储num数组后遍历 最终时间复杂度为o(n)

hashset

HashSet 是 Java 编程语言中的一个类,它实现了 Set 接口,用于存储不包含重复元素的集合。以下是 HashSet 的一些关键特点:

  1. 不包含重复元素HashSet 中不允许有重复的元素。如果试图添加一个已经存在的元素,HashSet 将不会进行任何操作。

  2. 无序集合HashSet 不保证元素的顺序。这意味着元素插入的顺序与它们被迭代或输出的顺序可能不同。

  3. 基于哈希表实现HashSet 底层使用哈希表来存储元素,这使得它具有非常快的查找、添加和删除操作,平均时间复杂度为 O(1)。

  4. 非线程安全HashSet 不是线程安全的,如果多个线程同时访问并修改 HashSet,必须通过外部同步来保证线程安全。

  5. 允许包含一个 null 元素:在 HashSet 中可以包含一个 null 元素。

  6. 迭代顺序是不确定的:由于 HashSet 是基于哈希表实现的,所以迭代顺序是不确定的,并且可能会在不同的 JVM 运行中变化。

st.contains() 方法是 Set 接口的一个方法,用于检查指定的集合 st 是否包含某个特定的元素。这里的 st 是一个 Set 类型的对象,而 contains() 方法接受一个参数,这个参数是你想要检查是否存在于集合中的对象。

class Solution {

    public int longestConsecutive(int[] nums) {

           //最长序列数

                int target=0;

                //将全部的数放入hashset中

                Set<Integer> set=new HashSet<>();

                for (int num : nums) {

                    set.add(num);

                }

                for (int x : set) {

                    //如果集合中的数小于当前数 继续走

                    if (set.contains(x-1)) {

                        continue;

                    }

                    //定义y为x的下一个数

                    int y =x+1;

                    //不断判断下一个数是否在集合中

                    while (set.contains(y)) {

                        y++;

                    }

                    //循环结束后 y-x是最后一个在哈希集合中的数

                    target=Math.max(target, y-x);

                }

                return target;

    }

}


主要思考点 用hashset存储 在hashset中 遍历并判断当前数的下一位是否比当前要大 如果大 那就加一继续判断 如果小于 那就跳出 换下一个数继续遍历 

第一个增强for是用来找起点  

  • for (int x : st) {:这行代码定义了一个循环,它将遍历集合 st 中的每个整数,每次迭代将集合中的一个元素赋值给变量 x

  • if (st.contains(x - 1)) { continue; }:这行代码检查集合 st 是否包含 x - 1。如果包含,这意味着 x 不是连续序列的起点,因为它前面还有其他数字。因此,使用 continue 语句跳过当前迭代,继续下一次迭代。