Longest Consecutive Sequence ----leetcode

来源:互联网 发布:淘宝客转换淘口令软件 编辑:程序博客网 时间:2024/06/08 02:46

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;    }}


0 0
原创粉丝点击