Problem: 128. 最长连续序列
题目描述
思路
1.先将数组中的元素存入到一个set集合中(去除重复的元素)
2.欲找出最长连续序列(先定义两个int变量longestSequence和currentSequence用于记录最长连续序列和当前最长序列),我们可以在遍历给定数组时(当前遍历到的元素为nums[i])去set集合中查找nums[i] - 1,是否存在;若存在,直接遍历下一个nums中的元素;若不存在则持续查找nums[i] + 1,是否存在于set集合中,若存在则更新currentSequence和longestSequence
复杂度
时间复杂度:
O ( n ) O(n) O(n);其中 n n n为数组nums的长度
空间复杂度:
O ( n ) O(n) O(n)
Code
class Solution {
/**
* Hash
*
* @param nums Given array
* @return int
*/
public int longestConsecutive(int[] nums) {
Set<Integer> set = new HashSet<>();
// 将数据保存到set中以实现去重
for (int num : nums) {
set.add(num);
}
int longestSequence = 0;
for (int num : set) {
// 如果num-1不存在于set中
if (!set.contains(num - 1)) {
int currentNum = num;
int currentSequence = 1;
// 找到num + 1......
while (set.contains(currentNum + 1)) {
currentNum += 1;
// 将当前currentSequence加1
currentSequence += 1;
}
longestSequence = Math.max(currentSequence, longestSequence);
}
}
return longestSequence;
}
}