题目链接:
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
算法思想:
需要输出的是最长连续序列的长度,所以需要知道连续序列的起点,从起点开始,如果后面有对应连续的数,长度就+1,如果没有则中止,重新寻找下一个起点,只需要输出最长的序列长度;
引入了两个问题,如何确定连续序列和起点和如何确定连续序列的终点从而中止遍历?
确定起点:如果一个数是连续序列的起点,那么在数组中一定不存在对应数字-1的数
确定终点:如果一个数是连续数列的终点,那么在数组中一定不存在对应数字+1的数
此时就需要一个哈希表遍历数组,将对应的元素存储到哈希表中,进行判断的时候使用哈希表的contains(key)方法即可
public int longestConsecutive(int[] nums) {
HashSet<Integer> set = new HashSet<>();
//将数组中的每个数添加到哈希表中
for(int i = 0;i < nums.length;i++) {
set.add(nums[i]);
}
int res = 0;//记录最长连续序列的长度
int len = 0;//连续序列的长度
for(int num : set) {
if(!set.contains(num-1)) {
len = 1;
while(set.contains(++num)) {
len++;
}
res = Math.max(res, len);
}
}
return res;
}