// 用map将数组元素全部放进去,然后每次遍历一个数组元素,就看看以当前元素开头最长序列是多少
// 这里有一个优化:在判断以当前元素开头的最长序列的时候,看看当前元素-1是否存在,如果存在,就不需要计算了,以当前元素-1肯定比当前元素大
class Solution {
public int longestConsecutive(int[] nums) {
// 1. 特殊情况
if (nums == null || nums.length == 0)
return 0;
HashSet<Integer> set = new HashSet<>(); // 一个容器看当前元素-1 这个元素在不在
for (int i : nums) {
set.add(i);
}
int maxLen = 0;
// 2. 开始遍历nums,看当前元素的值-1在不在
for (int i : nums) {
// 3. 这里有一个优化:跳过curNum - 1,比如1342,在计算以4为最长连续序列的时候,算3的时候已经得到了,4算了也是白算,肯定不是自己
if (!set.contains(i - 1)) {
int curLen = 1; // 以当前元素开始的最长序列
int curNum = i;
while (set.contains(curNum + 1)) {
curLen++;
curNum++;
}
maxLen = Math.max(curLen, maxLen);
}
}
return maxLen;
}
}```
Hot100【十】:最长连续序列
于 2024-04-08 23:45:50 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)