1. 程式人生 > 實用技巧 >LeetCode128. 最長連續序列

LeetCode128. 最長連續序列

☆☆☆☆思路:雜湊表。參考 官方題解

class Solution {
    public int longestConsecutive(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for (int num : nums) {
            set.add(num);
        }
        int res = 0;
        for (int num : nums) {
            // 避免從 x+1 或 x+2...等開始匹配,這樣得到的結果肯定小於從x開始的
if (!set.contains(num - 1)) { int len = 1; // 當前序列的長度 // 對每個數x,以其為起點,不斷列舉 x+1,x+2...是否存在 while (set.contains(num + 1)) { num += 1; len += 1; } res = Math.max(res, len); } }
return res; } }

  時間複雜度為O(n),空間複雜度為O(n)

時間複雜度分析:只有當一個數是連續序列的第一個數的情況下才會進入內層迴圈,然後在內層迴圈中匹配連續序列中的數,因此陣列中的每個數只會進入內層迴圈一次。因此,總時間複雜度為 O(n)。