- 给定一个未排序的整数数组
nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度
- 请你设计并实现时间复杂度为 O(n) 的算法解决此问题
class Solution {
public int longestConsecutive(int[] nums) {
// 检查数组是否为空,长度为0
if(nums == null || nums.length == 0) {
return 0;
}
// 将数组中的元素放到哈希集合中
HashSet<Integer> numSet = new HashSet<>();
for(int num : nums) {
numSet.add(num);
}
int longestStreak = 0;
for(int num : numSet) {
// 检查是否是序列的第一个元素
if(!numSet.contains(num - 1)) {
int currentNum = num;
int currentStreak = 1;
while(numSet.contains(currentNum + 1)) {
currentNum = currentNum + 1;
currentStreak = currentStreak + 1;
}
longestStreak = Math.max(longestStreak, currentStreak);
}
}
return longestStreak;
}
}
在这个示例中,我们首先检查了输入数组是否为空或长度为零,如果是,则直接返回 0。然后我们创建了一个哈希集合,并将数组中的所有元素添加到集合中。接着,我们遍历集合中的每个元素,只有当该元素不是某个连续序列的一部分时(即其前一个数不在集合中),才开始从该元素出发查找最长的连续序列,并更新最长序列的长度。最后返回找到的最长连续序列的长度





网友评论