给定一个未排序的整数数组,找出最长连续序列的长度。java
要求算法的时间复杂度为 O(n)。算法
示例:数组
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。code
利用Set结构, 来简化每次的判断,foreach结构遍历每个数,排序
if结构先肯定数是否位于序列, 不位于直接跳出;leetcode
while循环来肯定此序列最长的长度,get
复杂度一共为O(n);class
public int longestConsecutive(int[] nums) { Set<Integer> set = new HashSet<>(); for (int num : nums) set.add(num); int longestCnt = 0; for (int num : nums) { if (!set.contains(num - 1)) { int curNum = num; int curCnt = 1; while (set.contains(curNum + 1)) { curNum++; curCnt++; } longestCnt = Math.max(longestCnt,curCnt); } }
其他方法:能够采用排序, 不过复杂度不符合要求,复杂度一共有O(nlog(n));foreach