|
| 1 | +/** |
| 2 | + * ์ฃผ์ด์ง ๋ฐฐ์ด์์ ๊ฐ์ฅ ๊ธด ์ฐ์๋ ์ซ์ ์ํ์ค์ ๊ธธ์ด๋ฅผ ๋ฐํํ๋ ํจ์ |
| 3 | + * - ์๊ฐ ๋ณต์ก๋: O(n) |
| 4 | + * - O(n): Set์ ์ซ์๋ฅผ ์ถ๊ฐํ๊ณ , ๊ฐ ์ซ์๋ฅผ ์ํํ๋ฉด์ ์ฐ์๋ ์ํ์ค๋ฅผ ๊ณ์ฐ |
| 5 | + * - ๊ณต๊ฐ ๋ณต์ก๋: O(n) |
| 6 | + * - O(n): ์ซ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํ Set ์ฌ์ฉ |
| 7 | + * |
| 8 | + * @param {number[]} nums - ์ ์ ๋ฐฐ์ด |
| 9 | + * @returns {number} - ๊ฐ์ฅ ๊ธด ์ฐ์๋ ์ซ์ ์ํ์ค์ ๊ธธ์ด |
| 10 | + */ |
| 11 | +function longestConsecutive(nums: number[]): number { |
| 12 | + if (nums.length === 0) return 0; // ๋น ๋ฐฐ์ด ์ฒ๋ฆฌ (๊ธธ์ด 0 ๋ฐํ) |
| 13 | + |
| 14 | + // 1. ๋ฐฐ์ด์ Set์ ์ ์ฅํ์ฌ ์ค๋ณต์ ์ ๊ฑฐํ๊ณ ๋น ๋ฅธ ์กฐํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํจ O(n) |
| 15 | + const numSet = new Set(nums); |
| 16 | + |
| 17 | + let longestSeq = 0; // ๊ฐ์ฅ ๊ธด ์ฐ์ ์ํ์ค ๊ธธ์ด๋ฅผ ์ ์ฅํ ๋ณ์ |
| 18 | + |
| 19 | + // 2. ๊ฐ ์ซ์๊ฐ ์ํ์ค์ ์์์ ์ธ์ง ํ์ธ |
| 20 | + for (const num of numSet) { |
| 21 | + // ์ซ์ `num`์ด ์ํ์ค์ ์์์ ์ธ์ง ํ์ธ |
| 22 | + // (num-1์ด Set์ ์๋ค๋ฉด num์ ์ํ์ค์ ์์์ ) |
| 23 | + if (!numSet.has(num - 1)) { |
| 24 | + // ์๋ก์ด ์ํ์ค ์์ |
| 25 | + let curNum = num; |
| 26 | + let curSeq = 1; |
| 27 | + |
| 28 | + // 3. ์ํ์ค๊ฐ ๋๋ ๋๊น์ง ๊ธธ์ด๋ฅผ ๊ณ์ฐ O(n) |
| 29 | + while (numSet.has(curNum + 1)) { |
| 30 | + curNum += 1; // ํ์ฌ ์ซ์๋ฅผ 1 ์ฆ๊ฐ |
| 31 | + curSeq += 1; // ์ํ์ค ๊ธธ์ด๋ฅผ 1 ์ฆ๊ฐ |
| 32 | + } |
| 33 | + |
| 34 | + // 4. ๊ฐ์ฅ ๊ธด ์ํ์ค ๊ธธ์ด๋ฅผ ์
๋ฐ์ดํธ |
| 35 | + longestSeq = Math.max(longestSeq, curSeq); |
| 36 | + } |
| 37 | + } |
| 38 | + |
| 39 | + return longestSeq; // ๊ฐ์ฅ ๊ธด ์ฐ์ ์ํ์ค์ ๊ธธ์ด ๋ฐํ |
| 40 | +} |
| 41 | + |
0 commit comments