题目:给定无序数组,返回其中最长的连续序列的长度。
例:
arr=[100,4,200,1,3,2],最长的连续序列为[1,2,3,4],所以返回4。
实现:利用哈希表实现时间复杂度O(N),额外空间复杂度O(N)的方法。
- 生成哈希表Hashmap<Integer,Integer> map,key代表遍历过的某个数,value代表key这个数所在的最长连续序列的长度。同时map还可以表示arr的一个数是否出现过。
- 从左到右遍历arr。在map中加入记录(arr[i],1),表示arr[i]单独作为一个连续序列。然后看map中是否有arr[i]-1如果有,则arr[i]-1所在的序列可以和arr[i]合并,合并后记为A序列。利用map可以得到A序列的长度lenA,最小值记为leftA,最大值记为rightA。在map中更新与leftA和rightA有关的记录,更新成(leftA,lenA)和(rightA,lenA)。接下来看map中是否含有arr[j]+1,如果有,则说明arr[i]+1所在的序列可以和A合并,合并后记为B序列。利用map得到B序列的长度lenB,…
- 遍历过程中使用全局变量max记录每次合并出的序列的长度的最大值,最后返回max。
1 | import java.util.HashMap; |