F_G

许多问题需要说清楚就可以&&走永远比跑来的重要

导航

[Leetcode] Longest Consecutive Sequence

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(nlogn),空间复杂度取决于具体的sort算法

二、使用hashset可以将时间复杂度降低为O(N),同时空间复杂度是O(N)

基本思想是:对于每一个数字num,在hashset当中查找含有num的那个区间的左边界和右边界,从而得到这个独立区间,从而获得它的长度。

corner case:在检查一个数字之后应该将其从hashset当中删除,因为那个数字所在的区间已经被搜索了,没有必要再重复的搜索,不然复杂度会变得非常高

例如: 3 2 1 4 5 6 7 10 9 8

如果不在检查过程当中进行删除,那么美都会遍历[1,10]这个区间,实际上在 3的时候,就已经把这个区间遍历了一遍,以后再遇到这个区间当中的数字,应该直接跳过。

具体的代码如下:

 1 import java.util.*;
 2 
 3 public class Solution {
 4     public int longestConsecutive(int[] nums) {
 5         Set<Integer> set = new HashSet<Integer>();
 6         for(int i: nums)
 7             set.add(i);
 8         int max = Integer.MIN_VALUE;
 9         for(int i=0;i<nums.length;i++){
10             if(!set.contains(nums[i])) continue;
11             int count = 1;
12             int mid = nums[i];
13             set.remove(mid);
14             //to left
15             int left=mid-1;
16             while(true){
17                 if(set.contains(left)){
18                     set.remove(left);
19                     count++;
20                     left--;
21                 }else{
22                     break;
23                 }
24             }
25             //to right
26             int right = mid+1;
27             while(true){
28                 if(set.contains(right)){
29                     set.remove(right);
30                     count++;
31                     right++;
32                 }else{
33                     break;
34                 }
35             }
36             max = Math.max(max,count);
37         }
38         return max;
39     }
40 }

一、在此总结一下Set的用法,Set在java当中是一个接口,具体可以实现为HashSet, TreeSet, LinkedTreeSet

Set set = ....

set.add()

set.contains()

set.remove()

二、Map的用法 参考

在此总结一下Map的用法,Map在java当中是一个接口,具体可以实现为HashMap, TreeMap, LinkedTreeMap

Map map = ....

map.put(key,value);

set.containsKey()

set.remove()

posted on 2015-08-17 15:29  F_G  阅读(133)  评论(0编辑  收藏  举报