Skip to content

Commit 7c8a22c

Browse files
committed
feat: implement longestConsecutive function to find the length of the longest consecutive sequence in a list
1 parent 45ffd9c commit 7c8a22c

1 file changed

Lines changed: 32 additions & 0 deletions

File tree

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
class Solution:
2+
def longestConsecutive(self, nums: list[int]) -> int:
3+
"""
4+
๊ฐ€์žฅ ๊ธธ๊ฒŒ ์—ฐ์†๋œ ์ˆซ์ž๋“ค์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
5+
** ์กฐ๊ฑด: O(n) ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ํ’€์ดํ•ด์•ผ ํ•œ๋‹ค.
6+
7+
๋ฐฉ๋ฒ•
8+
0. set ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด ์ค‘๋ณต ์ œ๊ฑฐ
9+
1. ์ •๋ ฌํ•œ ํ›„ ์ˆœํšŒํ•˜๋ฉด ์—ฐ์†๋œ ์ˆซ์ž๊ฐ€ ๋Š๊ธฐ๋Š” ์ง€์ ์„ ์ฐพ์•„ max ๊ธธ์ด๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๋ฐฉ๋ฒ•.
10+
=> O(nlogn) => ์‹œ๊ฐ„๋ณต์žก๋„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•œ๋‹ค.
11+
2. DP ๋ฐฉ์‹์œผ๋กœ max(list) ๋งŒํผ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด, ๊ฐ ์ˆซ์ž๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์ฒดํฌํ•˜๋ฉด์„œ ์—ฐ์†๋œ ์ˆซ์ž๋“ค์˜ ๊ธธ์ด๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๋ฐฉ๋ฒ•.
12+
=> ์Œ์ˆ˜ ์ˆซ์ž๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์–ด, ํ•ด๋‹น ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
13+
3. ๋ชฉ๋ก์„ ์ˆœํšŒํ•˜๋ฉด์„œ, ๊ฐ ์ˆซ์ž๊ฐ€ ์—ฐ์†๋œ ์ˆซ์ž์˜ ์‹œ์ž‘์ ์ธ์ง€ ํ™•์ธํ•œ ํ›„, ์—ฐ์†๋œ ์ˆซ์ž๋“ค์˜ ๊ธธ์ด๋ฅผ ํŒŒ์•…ํ•ด, max ๊ธธ์ด๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๋ฐฉ๋ฒ•.
14+
=> O(n)
15+
4. union-find ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด, ๊ฐ ์ˆซ์ž๋“ค์„ ์—ฐ๊ฒฐํ•œ ํ›„, ๊ฐ€์žฅ ๊ธด ์—ฐ๊ฒฐ๋œ ์ˆซ์ž๋“ค์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•.
16+
=> O(n), ๊ตฌํ˜„ x
17+
18+
Args:
19+
nums (list[int]): ์ •๋ ฌ๋˜์ง€ ์•Š์€ ์ค‘๋ณต ํฌํ•จ ์ •์ˆ˜ ๋ฐฐ์—ด
20+
21+
Returns:
22+
int: ๊ฐ€์žฅ ๊ธธ๊ฒŒ ์—ฐ์†๋œ ์ˆซ์ž๋“ค์˜ ๊ธธ์ด
23+
"""
24+
u_nums = set(nums)
25+
longest = 0
26+
for u_num in u_nums:
27+
if u_num - 1 not in u_nums:
28+
local = 1
29+
while u_num + local in u_nums:
30+
local += 1
31+
longest = max(local, longest)
32+
return longest

0 commit comments

Comments
ย (0)