您的位置:首页 > 产品设计 > UI/UE

[LeetCode] Longest Consecutive Sequence

2016-06-24 14:10 423 查看
题目:

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;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode