排序法就不说了。首先,将数组的元素放入set中,一是去重,二是可以在o(1)的时间内访问。选区nums中的元素n,判断 n+1,n+2...是否在set中,如果在,则更新连续子序列的长度,如果不在,换下一个元素。注意,为了避免重复,我们总是选区满足n-1不在set中这一条件下的n作为序列的开头。(如遍历过2,3,4,就不用再遍历3,4)。
class Solution {
public int longestConsecutive(int[] nums) {
Set<Integer> num_set = new HashSet<Integer>();
for (int num : nums) {
num_set.add(num);
}
int longestStreak = 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;
}
longestStreak = Math.max(longestStreak, currentStreak);
}
}
return longestStreak;
}
}