数组——数组中最长连续序列

来源:互联网 发布:淘宝处理不公平 编辑:程序博客网 时间:2024/05/01 17:49

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



0 0
原创粉丝点击