题目地址:
https://leetcode.com/problems/longest-consecutive-sequence/
题目大意是给定一个数组,求其中的一个子集,这个子集的数可以组成一个尽量长的连续的序列,问这个序列最长的长度。这道题其实并不难,用HashSet可以得到一个时空复杂度都是 O ( n ) O(n) O(n)的算法:
import java.util.Set;
import java.util.HashSet;
class Solution {
public int longestConsecutive(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
Set<Integer> set = new HashSet<>();
for (int num : nums) {
set.add(num);
}
int maxLen = 1;
while (!set.isEmpty()) {
// 初始化一个长度,然后在集合里随便取个数
int curLen = 1;
int curNum = set.iterator().next();
set.remove(curNum);
// 算比它大的连续的数有几个
for (int i = 1; set.remove(curNum + i); i++) {
curLen++;
}
// 算比它小的连续的数有几个
for (int i = 1; set.remove(curNum - i); i++) {
curLen++;
}
if (curLen > maxLen) {
maxLen = curLen;
}
}
return maxLen;
}
}