解法
利用哈希表插入和查找都是O(1)的时间复杂度,把数组的数先插入哈希表,去除了重复元素。O(n)
再对HashSet里面的数,如果这个数减一不在这个表里面,那么把它当成开始元素,记录有多少个连续。O(n)
O(n)+O(n)=O(n)
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
public class N128 {
public int longestConsecutive(int[] nums) {
int longest=0; Set<Integer> set=new HashSet<Integer>(); for(int num:nums){ set.add(num); } for(int num:set){ if(!set.contains(num-1)){ int currentNum=num; int countNum=1; while (set.contains(currentNum+1)){ currentNum+=1; countNum+=1; } longest=Math.max(countNum,longest);
} } return longest;
} }
|
128.最长连续序列