题目描述: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;
}
}