令人困惑的题目,题目意思是数值上连续的序列,不要求位置和顺序上连续,但是不能重复
所以可以先用HashSet去重,然后寻找序列的开头。遍历每一个元素num,如果存在num - 1,说明它不是开头,找下一个,直到找到开头,也就是没有“过往”的那一个num。接着num + 1找出最长连续序列即可。
为什么要找“开头”?因为可以避免重复统计。比如,34和1234都是同一序列,就重复计算了
public int longestConsecutive(int[] nums) {
Set<Integer> nums_set = new HashSet<>();
for (int num : nums) {
nums_set.add(num);
}
int longestStreak = 0;
for (int num : nums_set) {
if (!nums_set.contains(num - 1)) {
int currentNum = num;
int currentStreak = 1;
while (nums_set.contains(currentNum + 1)) {
currentNum += 1;
currentStreak += 1;
}
longestStreak = Math.max(longestStreak, currentStreak);
}
}
return longestStreak;
}