LeetCode128. 最長連續序列
阿新 • • 發佈:2021-01-12
☆☆☆☆思路:雜湊表。參考 官方題解
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)。