[LeetCode] Longest Consecutive Sequence

来源:互联网 发布:foreach遍历数组 编辑:程序博客网 时间:2024/06/01 15:36

题目:
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.

Subscribe to see which companies asked this question
思路:
用一个map存储数组中每个值。
遍历数组,比如到了“4”这个数,我将判断map中是否出现3,2,1。。。5,6,7。。。出现则距离增加,并且map中3,2,1等置空,这样时间复杂度O(n)

public class Solution {    public int longestConsecutive(int[] nums) {    if(nums.length == 0){return 0;}        HashMap<Integer, Integer> map = new HashMap<>();        int longestValue = Integer.MIN_VALUE;        for(int i=0;i<nums.length;i++)        {            map.put(nums[i], 1);        }        for(int i=0;i<nums.length;i++)        {            int dis = 1;            int value = nums[i];            if(map.get(value) !=1){continue;}            int leftValue = value - 1,rigthValue = value+1;            while(map.containsKey(leftValue)&&map.get(leftValue) == 1)            {                dis++;                map.put(leftValue, 0);                leftValue--;            }            while(map.containsKey(rigthValue)&&map.get(rigthValue) == 1)            {                dis++;                map.put(rigthValue, 0);                rigthValue++;            }            if(dis>longestValue){longestValue = dis;}        }        return longestValue;      }}
0 0