Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
For example,
Given [100, 4, 200, 1, 3, 2]
,
The longest consecutive elements sequence is [1, 2, 3, 4]
. Return its length: 4
.
Your algorithm should run in O(n) complexity.
题目大意:很明显就是找最长子序列长度,由于要求复杂度为O(n),最快的排序也需要O(nlogn),排序后再找肯定达不到要求,这里可以借助于java中的容器hashset,然后在数组中开始找,对于选定的值进行前后找,记录下长度,对于hashset中遍历过的值删除掉,以防出现极端的情况[1,2,3,4...n],这种情况不删除已经访问过的点,会导致O(n*2)的复杂度。代码如下:
public class Solution {
public int longestConsecutive(int[] num) {
if(num.length==0||num.length==1)
return num.length;
HashSet<Integer> hash=new HashSet<Integer>();
int res=0;
for(int i=0;i<num.length;i++)
hash.add(num[i]);
for(int i=0;i<num.length;i++)
{
int templen=1,tempnum;
tempnum=num[i]+1;
while(hash.contains(tempnum))
{
hash.remove(tempnum);
templen++;
tempnum++;
}
tempnum=num[i]-1;
while(hash.contains(tempnum))
{
hash.remove(tempnum);
templen++;
tempnum--;
}
if(templen>res)
res=templen;
if(res>=num.length)
break;
}
return res;
}
}