11# 처음 풀이
22# O(n log n) time, O(n) space
33
4+ from typing import List
5+
46class Solution :
57 def longestConsecutive (self , nums : List [int ]) -> int :
68 if nums == []:
@@ -67,11 +69,19 @@ def longestConsecutive(self, nums: List[int]) -> int:
6769 return longest
6870
6971
70- # 최종 개선 풀이
71- # O(n) time, O(n) space
72- # 위 풀이에서 한쪽으로 구간을 찾지 않고, 양쪽으로 찾으며 숫자를 집합에서 제거하며
73- # 집합에서 원소가 하나도 남지 않을 때까지 하면 가장 긴 구간의 길이를 구할 수 있다.
74- # 배열의 모든 정수를 set에 저장했으므로 공간 복잡도는 O(n)
72+ """
73+ 최종 개선 풀이
74+ O(n) time, O(n) space
75+
76+ 위 풀이에서 한쪽으로 구간을 찾지 않고, 양쪽으로 찾으며 숫자를 집합에서 제거하며
77+ 집합에서 원소가 하나도 남지 않을 때까지 하면 가장 긴 구간의 길이를 구할 수 있다.
78+
79+ 배열의 모든 정수를 set에 저장했으므로 공간 복잡도는 O(n), 시간 복잡도 O(n)
80+ set 삽입: O(1), 삭제: 평균 O(1), 순서 보장 x => 순서를 무시하고 존재 여부(빠른 탐색)이 중요할 때 사용.
81+ 존재하지 않는 값을 pop(), remove()시 KeyError 주의
82+
83+ max(a, b): 두 값 중 큰 값을 반환 → O(1)
84+ """
7585
7686class Solution :
7787 def longestConsecutive (self , nums : List [int ]) -> int :
@@ -93,6 +103,28 @@ def longestConsecutive(self, nums: List[int]) -> int:
93103
94104 return longest
95105
106+ """
107+ 25/7/23 복습, 위 최적화 풀이로 풀지 못함
108+ TC: O(n log n)
109+ SC: O(n)
110+ """
111+ class Solution :
112+ def longestConsecutive (self , nums : List [int ]) -> int :
113+ if not nums :
114+ return 0
115+ nums = sorted (list (set (nums )))
116+ max_cnt = 1
117+ cnt = 1
118+
119+ for i in range (len (nums ) - 1 ):
120+ if nums [i ] + 1 == nums [i + 1 ]:
121+ cnt += 1
122+ max_cnt = max (max_cnt , cnt )
123+ else :
124+ cnt = 1
125+
126+ return max_cnt
127+
96128# TS 풀이
97129# O(n) time, O(n) space
98130# JavaScript Set에서 값을 꺼내고자 할때는 **numSet.values().next().value** 사용
0 commit comments