1
1
# 처음 풀이
2
2
# O(n log n) time, O(n) space
3
3
4
+ from typing import List
5
+
4
6
class Solution :
5
7
def longestConsecutive (self , nums : List [int ]) -> int :
6
8
if nums == []:
@@ -67,11 +69,19 @@ def longestConsecutive(self, nums: List[int]) -> int:
67
69
return longest
68
70
69
71
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
+ """
75
85
76
86
class Solution :
77
87
def longestConsecutive (self , nums : List [int ]) -> int :
@@ -93,6 +103,28 @@ def longestConsecutive(self, nums: List[int]) -> int:
93
103
94
104
return longest
95
105
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
+
96
128
# TS 풀이
97
129
# O(n) time, O(n) space
98
130
# JavaScript Set에서 값을 꺼내고자 할때는 **numSet.values().next().value** 사용
0 commit comments