执行结果:
通过
显示详情
执行用时 :5 ms, 在所有 Java 提交中击败了83.59% 的用户
内存消耗 :39.5 MB, 在所有 Java 提交中击败了5.25%的用户
题目:
给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-consecutive-sequence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
利用一个hashset来查找,是否含有下一个大的元素,还有就是优化,遍历数组的时候,要从连续子序列的第一个数开始遍历,也就是num-1.
代码:
class Solution {
public int longestConsecutive(int[] nums) {
if(nums.length==0)
{
return 0;
}
HashSet<Integer> hash=new HashSet<>();
for(int num:nums)
{
hash.add(num);
}
int longest=1;
for(int num:nums)
{
//优化,不需要每个都去找,而是从连续子序列的最小值先找
if(!hash.contains(num-1))
{
int curLongest=1;
int curValue=num;
while(hash.contains(curValue+1))
{
curLongest++;
curValue++;
}
longest=Math.max(longest,curLongest);
}
}
return longest;
}
}