1. 程式人生 > >leetcode128 最長連續序列

leetcode128 最長連續序列

給定一個未排序的整數陣列,找出最長連續序列的長度。

要求演算法的時間複雜度為 O(n)

示例: 輸入: [100, 4, 200, 1, 3, 2]  輸出: 4

解釋: 最長連續序列是 [1, 2, 3, 4]。它的長度為 4。

       使用一個集合set存入所有的數字,然後遍歷陣列中的每個數字,如果其在集合中存在,那麼將其移除,然後分別用兩個變數pre和next算出其前一個數跟後一個數,然後在集合中迴圈查詢,如果pre在集合中,那麼將pre移除集合,然後pre再自減1,直至pre不在集合之中,對next採用同樣的方法,那麼next-pre-1就是當前數字的最長連續序列,更新res即可。

public int longestConsecutive(int[] nums){
    HashSet<Integer> s = new HashSet<>();
    int res = 0;
    for(int num : nums) s.add(num);
    for(int num : nums){
        if(s.remove(num)){
            int pre = num - 1, next = num + 1;
            while(s.remove(pre)) pre--;
            while(s.remove(next)) next++;
            res = Math.max(res, next - left - 1);
        }
    }
    return res;
}