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) ,所以不能直接排序。可以把数组存入hashset,考察每个元素的相邻元素是否在set内,把考察过的元素删除。
1 public class Solution { 2 public int longestConsecutive(int[] num) { 3 HashSet<Integer> hashSet; 4 5 if (num.length==0) { 6 return 0; 7 } 8 if (num.length==1) { 9 return 1; 10 } 11 hashSet=new HashSet<>(); 12 13 for (int i = 0; i < num.length; i++) { 14 hashSet.add(num[i]); 15 } 16 int res=1; 17 for (int i = 0; i < num.length; i++) { 18 int tmplen=1; 19 int tmpnum=num[i]+1; 20 while (hashSet.contains(tmpnum)) { 21 tmplen++; 22 hashSet.remove(tmpnum); 23 tmpnum++; 24 } 25 tmpnum=num[i]-1; 26 while (hashSet.contains(tmpnum)) { 27 tmplen++; 28 hashSet.remove(tmpnum); 29 tmpnum--; 30 } 31 if (tmplen>res) { 32 res=tmplen; 33 } 34 35 } 36 return res; 37 } 38 }