[leetcode-128] 最长连续序列
给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
如果不要求算法的时间复杂度为 O(n),排序后遍历即可。沒想出怎么解,看了思路后AC如下,主要是用到Hash映射
public class LongestConsecutiveSequence { public int longestConsecutive(int[] num) { //也可以用一个HashMap,Set是一个只包含键值的特殊Map Set<Integer> set = new HashSet<>(); for(int n : num) { set.add(n); } int max = 1; for (int n : num) { if (set.contains(n)) { int cur = n; int temp = 1; while(set.contains(--cur)) { temp = temp + 1; set.remove(n); } cur = n; while(set.contains(++cur)) { temp = temp + 1; set.remove(n); } if (temp>max) { max = temp; } } } return max; } }