解决思路:用hashset存储num数组后遍历 最终时间复杂度为o(n)
hashset
HashSet
是 Java 编程语言中的一个类,它实现了 Set
接口,用于存储不包含重复元素的集合。以下是 HashSet
的一些关键特点:
不包含重复元素:
HashSet
中不允许有重复的元素。如果试图添加一个已经存在的元素,HashSet
将不会进行任何操作。无序集合:
HashSet
不保证元素的顺序。这意味着元素插入的顺序与它们被迭代或输出的顺序可能不同。基于哈希表实现:
HashSet
底层使用哈希表来存储元素,这使得它具有非常快的查找、添加和删除操作,平均时间复杂度为 O(1)。非线程安全:
HashSet
不是线程安全的,如果多个线程同时访问并修改HashSet
,必须通过外部同步来保证线程安全。允许包含一个 null 元素:在
HashSet
中可以包含一个null
元素。迭代顺序是不确定的:由于
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
语句跳过当前迭代,继续下一次迭代。