Problem: 128. 最长连续序列
思路
看题后想到的是排序,然后判断连续. 但是时间不符合. 所以看的官方题解之后,学习了此解法.
解题方法
- 使用set去重.
2.遍历set判断当前num是否为连续数首个元素 即 currNum-1不存在.
3.找到首个元素后,再次循环,查询是否存在下一个元素 即currNum+1. 直到不存在下一个元素为止.
4.每组完成后,与最大数进行比较, 即 Math.max();
复杂度
- 时间复杂度:
添加时间复杂度, O ( n ) O(n) O(n)
- 空间复杂度:
添加空间复杂度, O ( n ) O(n) O(n)
Code
class Solution {
public int longestConsecutive(int[] nums) {
//1.使用set去重
HashSet<Integer> set = new HashSet<>();
for (int num : nums) {
set.add(num);
}
int countStreak = 0;
for (Integer value : set) {
//2.找到首个元素
if (!set.contains(value-1)){
int currStreak=1;
int currNum =value;
//3.此序列包含下一个元素
while (set.contains(currNum+=1)){
currStreak++;
}
//4.找到最大数
countStreak = Math.max(countStreak,currStreak);
}
}
return countStreak;
}
}