1. 双向寻找
我也不知道我这种解法具体叫什么,思路就是:
- 先把所有数字放到一个HashSet里
- 然后对里面的每个数据都去双向的扩展,然后在HashSet里面去找
- 查找的过程记录下数量,同时从HashSet里删除避免重复查找
- 最后其实我们对于所有的连续数列只查找了一遍,时间复杂度O(n),空间复杂度O(n)
代码如下:
public int longestConsecutive(int[] nums) {
Set<Integer> set = new HashSet<>();
for(int num : nums)
set.add(num);
int result = 0;
for(int num : nums) {
int count = 1;
if(set.contains(num)) { //如果存在,那此元素所在的连续序列我们没找过
for(int i = num+1; set.contains(i); ++i) { //向右扩展
count++;
set.remove(i);
}
for(int i = num-1; set.contains(i); --i) { //向左扩展
count++;
set.remove(i);
}
result = Math.max(result, count); //更新结果
}
set.remove(num); //要注意将当元素移除
}
return result;
}