题目描述:longest-consecutive-sequence
一个未排序的数组,找出其中最长的连续序列,要求时间复杂度O(N).
For example,
Given[100, 4, 200, 1, 3, 2],
The longest consecutive elements sequence is[1, 2, 3, 4]. Return its length:4.
方法:
因时间复杂度要求,不能对数组先进行排序。
hashset的用法:HashSet<T> set=new HashSet(); hashset内部为一个hashmap支持,不保证set的迭代顺序,其基本操作add,remove,contains均在O(1)时间内完成。set中没有重复的元素
import java.util.*;
public class Solution {
public int longestConsecutive(int[] num) {
if(num == null||num.length == 0)
return 0;
//hashset
HashSet<Integer> hs=new HashSet();
for(int i:num)
{
hs.add(i);//***若hs中没有包含指定元素,则添加指定元素***;
}
int max=1;
for(int i:num)
{
int count=1;
int left=i-1;
int right=i+1;
while(hs.contains(Integer.valueOf(left)))
{
count++;
hs.remove(left);
left--;
}
while(hs.contains(Integer.valueOf(right)))
{
count++;
hs.remove(right);
right++;
}
if(count>max)
{
max=count;
}
}
return max;
}
}
本文介绍了一种求解未排序数组中最长连续序列的算法,并提供了一个具体的Java实现案例。该算法利用HashSet达到O(N)的时间复杂度,适用于寻找数组中的最长连续元素序列。
839

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



