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;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/69091.html