|
1 | 1 | /**
|
2 | 2 | * Source: https://leetcode.com/problems/longest-consecutive-sequence/
|
| 3 | + * ์์ : ๋ฐฐ์ด์์ ๊ฐ์ฅ ๊ธด ์ฐ์๋ ์ ์ ์ํ์ค์ ๊ธธ์ด๋ฅผ ๋ฐํ |
| 4 | + * ํ์ด ์๊ฐ: 48๋ถ |
3 | 5 | * ํ์ด๋ฐฉ๋ฒ: ์ ๋ ฌ ํ ์ํ๋ฅผ ํตํด ์ฐ์๋ ๊ฐ์ด ์๋์ง ํ์ธ
|
4 |
| - * ์๊ฐ๋ณต์ก๋: O(nlogn) |
5 |
| - * ๊ณต๊ฐ๋ณต์ก๋: O(1) |
6 |
| - * |
7 |
| - * ์๊ฐ๋๋ ํ์ด๋ฐฉ๋ฒ |
| 6 | + * ์๊ฐ๋ณต์ก๋: O(nlogn) - ์ ๋ ฌ์ด ์ง๋ฐฐ์ ์ธ ์ฐ์ฐ |
| 7 | + * ๊ณต๊ฐ๋ณต์ก๋: O(1) - ์ถ๊ฐ ์ ์ฅ๊ณต๊ฐ์ด ์
๋ ฅ ํฌ๊ธฐ์ ๋น๋กํ์ง ์์ (์ ๋ ฌ์ in-place๋ก ๊ฐ์ ) |
8 | 8 | */
|
9 |
| - |
10 | 9 | function longestConsecutive(nums: number[]): number {
|
| 10 | + // ์ฃ์ง ์ผ์ด์ค: ๋น ๋ฐฐ์ด์ด๋ฉด 0 ๋ฐํ |
11 | 11 | if (nums.length === 0) return 0;
|
| 12 | + |
| 13 | + // ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ |
12 | 14 | const sorted = nums.sort((a, b) => a - b);
|
13 |
| - let prev = sorted[0]; |
14 |
| - let result = 1; |
15 |
| - let candiResult = 1; |
16 | 15 |
|
17 |
| - for (let current of sorted) { |
18 |
| - if (prev === current) continue; |
19 |
| - if (current === prev + 1) { |
20 |
| - candiResult += 1; |
| 16 | + let maxLength = 1; // ๊ฐ์ฅ ๊ธด ์ฐ์ ์ํ์ค ๊ธธ์ด |
| 17 | + let currentLength = 1; // ํ์ฌ ์ฐ์ ์ํ์ค ๊ธธ์ด |
| 18 | + let previousNum = sorted[0]; // ์ด์ ์ ์ฒ๋ฆฌํ ์ซ์ |
| 19 | + |
| 20 | + // ์ ๋ ฌ๋ ๋ฐฐ์ด์ ์ํํ๋ฉฐ ์ฐ์ ์ํ์ค ์ฐพ๊ธฐ |
| 21 | + for (let i = 1; i < sorted.length; i++) { |
| 22 | + const currentNum = sorted[i]; |
| 23 | + |
| 24 | + // ์ค๋ณต๋ ๊ฐ์ ๊ฑด๋๋ |
| 25 | + if (previousNum === currentNum) { |
| 26 | + continue; |
| 27 | + } |
| 28 | + |
| 29 | + // ์ฐ์๋ ๊ฐ์ธ ๊ฒฝ์ฐ ํ์ฌ ์ํ์ค ๊ธธ์ด ์ฆ๊ฐ |
| 30 | + if (currentNum === previousNum + 1) { |
| 31 | + currentLength++; |
21 | 32 | } else {
|
22 |
| - if (candiResult > result) { |
23 |
| - result = candiResult; |
24 |
| - } |
25 |
| - candiResult = 1; |
| 33 | + // ์ฐ์์ด ๋๊ธด ๊ฒฝ์ฐ, ์ต๋ ๊ธธ์ด ์
๋ฐ์ดํธ ํ ํ์ฌ ์ํ์ค ๊ธธ์ด ์ด๊ธฐํ |
| 34 | + maxLength = Math.max(maxLength, currentLength); |
| 35 | + currentLength = 1; |
26 | 36 | }
|
27 |
| - prev = current; |
| 37 | + |
| 38 | + previousNum = currentNum; |
28 | 39 | }
|
29 | 40 |
|
30 |
| - if (candiResult > result) result = candiResult; |
31 |
| - return result; |
| 41 | + // ๋ง์ง๋ง ์ํ์ค์ ๊ธธ์ด์ ์ต๋ ๊ธธ์ด ๋น๊ตํ์ฌ ์ต์ข
๊ฒฐ๊ณผ ๋ฐํ |
| 42 | + return Math.max(maxLength, currentLength); |
32 | 43 | }
|
0 commit comments