题目
思路
- 暴力的话arrays.sort然后直接找即可,但是这样的话好像有O(nlogn)的时间复杂度 不满足O(n),既然是O(n)的算法,那就是一次遍历,也不可能是dp,dp的话是O(n^2)
- 题解的解法确实比较简单,但不知道为什么就是没想到,就算想到了我估计也不觉得算O(n)…记一下吧。
代码
public int longestConsecutive(int[] nums) {
Set<Integer> num_set = new HashSet<Integer>();
for(int num:nums) num_set.add(num);
int ans=0;
for (int num : num_set) {
if (!num_set.contains(num - 1)) {
int currentNum = num;
int currentStreak = 1;
while (num_set.contains(currentNum + 1)) {
currentNum += 1;
currentStreak += 1;
}
ans = Math.max(ans, currentStreak);
}
}
return ans;
}