Skip to content

Commit 4333e4b

Browse files
committed
solve(w01): 128. Longest Consecutive Sequence
1 parent bd74a52 commit 4333e4b

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# https://leetcode.com/problems/longest-consecutive-sequence/
2+
3+
from typing import List
4+
5+
class Solution:
6+
def longestConsecutive1(self, nums: List[int]) -> int:
7+
"""
8+
[Complexity]
9+
- TC: O(n)
10+
- SC: O(n) (unique_nums)
11+
12+
[Approach]
13+
O(n) time์— ๋Œ์•„๊ฐ€์•ผ ํ•˜๋ฏ€๋กœ O(nlogn)์ธ sorting์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
14+
๊ทธ๋ฆฌ๊ณ  integer์—์„œ consecutive ๋ผ๋Š” ๊ฒƒ์€ 1 ์ฐจ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.
15+
๋”ฐ๋ผ์„œ hash map์—์„œ ํ˜„์žฌ ๋ณด๊ณ  ์žˆ๋Š” num ๊ฐ’์— ๋Œ€ํ•ด left(= num - 1)์™€ right(= num + 1)๋ฅผ O(1) time์— ์ฐพ์•„๋ณด๋Š” ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค.
16+
์ด๋•Œ, left์™€ right๋ฅผ ์–‘์˜†์œผ๋กœ ํ™•์žฅ์‹œ์ผœ๊ฐ€๋ฉด์„œ max_length = max(max_length, right - left - 1)๋กœ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.
17+
"""
18+
19+
max_length = 0
20+
unique_nums = set(nums)
21+
22+
for num in nums:
23+
# num์˜ consecutive integer์ธ left, right ๊ตฌํ•˜๊ธฐ
24+
left, right = num - 1, num + 1
25+
26+
# left, right ์–‘์˜†์œผ๋กœ ํ™•์žฅํ•˜๋ฉฐ unique_nums์—์„œ ์ง€์›Œ๋‚˜๊ฐ€๊ธฐ
27+
while left in unique_nums:
28+
unique_nums.remove(left)
29+
left -= 1
30+
while right in unique_nums:
31+
unique_nums.remove(right)
32+
right += 1
33+
34+
# ํ˜„์žฌ ๋ณด๊ณ  ์žˆ๋Š” num์ด ์†ํ•˜๋Š” consecutive sequence์˜ length๋Š” (right - left - 1)
35+
max_length = max(max_length, right - left - 1)
36+
37+
# unique_nums๊ฐ€ ๋น„์—ˆ์œผ๋ฉด, ๋”์ด์ƒ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†์Œ
38+
if not unique_nums:
39+
break
40+
41+
return max_length
42+
43+
def longestConsecutive(self, nums: List[int]) -> int:
44+
"""
45+
[Complexity]
46+
- TC: O(n)
47+
- SC: O(n) (unique_nums)
48+
49+
[Approach]
50+
์ฒซ ๋ฒˆ์งธ ํ’€์ด์™€ ๋น„์Šทํ•˜๋‚˜, unique_nums๋ฅผ ์ˆœํšŒํ•˜๋‹ค๊ฐ€ ํ˜„์žฌ ๋ณด๊ณ  ์žˆ๋Š” num์ด ์ž์‹ ์ด ์†ํ•œ consecutive sequence์˜ ๊ฐ€์žฅ left ๊ฐ’์ผ ๋•Œ๋งŒ
51+
์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ™•์žฅํ•œ๋‹ค๋Š” ์ ์—์„œ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ํ’€์ด์ด๋‹ค.
52+
์ด๋•Œ, ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ™•์žฅ ํ›„ max_length = max(max_length, right - num)๋กœ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.
53+
"""
54+
55+
max_length = 0
56+
unique_nums = set(nums)
57+
58+
for num in unique_nums:
59+
# ํ˜„์žฌ ๋ณด๊ณ  ์žˆ๋Š” num์ด, ์ž์‹ ์ด ์†ํ•œ consecutive sequence์˜ ๊ฐ€์žฅ left ๊ฐ’์ด๋ผ๋ฉด,
60+
if num - 1 not in unique_nums:
61+
# ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ™•์žฅํ•˜๊ธฐ
62+
right = num + 1
63+
while right in unique_nums:
64+
right += 1
65+
66+
# ํ˜„์žฌ ๋ณด๊ณ  ์žˆ๋Š” num์ด ์ฒซ ๋ฒˆ์งธ ๊ฐ’์ธ consecutive sequence์˜ length๋Š” (right - num)
67+
max_length = max(max_length, right - num)
68+
69+
return max_length

0 commit comments

Comments
ย (0)