给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-consecutive-sequence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
由于对时间复杂度有要求,所以我们不能用循环嵌套的方法来完成这个问题,这里运用集合,用空间换时间来实现。
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Solution {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String[] arr = str.split(",");
int[] Interval = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
Interval[i] = Integer.parseInt(arr[i]);
}
System.out.print(longestConsecutive(Interval));
}
public static int longestConsecutive(int[] nums) {
Set<Integer> numset = new HashSet<>();
for (Integer item : nums) numset.add(item);
int longest = 0;
for (Integer item : nums) {
int sum = 0;
int temp = item;
while (numset.remove(item)) {
sum++;
item--;
}//递减查找相邻数字,如item=100,则依次查找99,98,97...
item = temp;
while (numset.remove(item + 1)) {
sum++;
item++;
}//递增查找相邻数字,如item=100,则依次查找101,102,...
longest = Math.max(longest, sum);更新长度
}
return longest;
}
}