---
# System prepended metadata

title: 0128. Longest Consecutive Sequence
tags: [Leetcode, FaceBook, Bloomberg, Medium]

---

# 0128. Longest Consecutive Sequence
###### tags: `Leetcode` `Medium` `Bloomberg` `FaceBook`
Link: https://leetcode.com/problems/longest-consecutive-sequence/

## 思路 $O(N)$ $O(N)$
如果一点思路都没有，不如从brute force开始想，然后做优化
如果是暴力法的话，拿到一个数x，就开始通过遍历array找以它开始的序列$x+1,x+2,x+3...$
这样的时间复杂度是$O(N^3)$，因为每次找array里面是否存在$x+1,x+2$的过程都要耗费$O(N)$
这时候可以想到用HashSet，只需要$O(1)$，就能找到array里面是否存在这个数
其次，也不用每个数都要找以它开始的序列然后算长度，因为如果$x-1$存在在set里面，之前或之后肯定算过一遍以$x-1$开头的序列，所以只有当$x-1$不在set里面的时候，才需要找以$x$开头的序列算长度

时间复杂度之所以是$O(N)$不是$O(N^2)$是因为while回圈一共执行N次，平均下来，每个for回圈只执行一次while回圈，因此时间复杂度为$O(N)$

**注意：并不是说for里面套while，时间复杂度就一定是$O(N^2)$**

## Code
```java=
class Solution {
    public int longestConsecutive(int[] nums) {
        Set<Integer> set = new HashSet<>();
        int maxLen = 0;
        for(int num:nums) set.add(num);
        for(int num:nums){
            int len=1;
            if(!set.contains(num-1)){
                while(set.contains(num+1)){
                    len++;
                    num++;
                }
                maxLen = Math.max(maxLen, len);
            }
        }
        return maxLen;
    }
}
```