128. 最长连续序列
https://leetcode.cn/problems/longest-consecutive-sequence/
难度中等1260
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
示例 1:
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
示例 2:
输入:nums = [0,3,7,2,5,8,4,6,0,1] 输出:9 提示:
0 <= nums.length <= 105-109 <= nums[i] <= 109
通过次数264,865提交次数482,497
class Solution {
public int longestConsecutive(int[] nums) {
//解题思路:
//对nums排序
//arr[i]记录 0~i的连续序列长度
//max记录目前最长的序列。
if(nums.length==0) return 0;
Arrays.sort(nums);
for(int i=0;i<nums.length;i++)
{
System.out.print(nums[i]+" ");
}
int max=1;
int[] arr = new int[nums.length];
arr[0]=1;
for(int i=1;i<nums.length;i++)
{
if(nums[i]==nums[i-1]) arr[i] = arr[i-1];
else if(nums[i]!=nums[i-1]+1) arr[i] = 1;
else arr[i] = arr[i-1]+1;
if(arr[i]>max) max=arr[i];
}
return max;
}
}
class Solution {
public int longestConsecutive(int[] nums) {
//使用hash表
//实现:
//数组去重
//遍历hash表
Set<Integer> num_set = new HashSet<Integer>();
for(int i=0;i<nums.length;i++)
{
num_set.add(nums[i]);
}
int ans = 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++;
currentStreak++;
}
ans = Math.max(ans,currentStreak);
}
}
return ans;
}
}

766

被折叠的 条评论
为什么被折叠?



