|
| 1 | +from typing import List |
| 2 | + |
| 3 | +""" |
| 4 | +λ¬Έμ μ€λͺ
: |
| 5 | +μ λ ¬λμ§ μμ μ μ λ°°μ΄μμ κ°μ₯ κΈ΄ μ°μλ μ«μ μμ΄μ κΈΈμ΄λ₯Ό λ°ννλ λ¬Έμ |
| 6 | +O(n) μκ°λ³΅μ‘λλ‘ ν΄κ²°ν΄μΌ ν¨ => μ λ ¬ x |
| 7 | +
|
| 8 | +λͺ©ν: |
| 9 | +- ν΄μ μΈνΈλ‘ μ€λ³΅ μ κ±° |
| 10 | +- μ°μ μμ΄μ μμμ μ°ΎκΈ° |
| 11 | +
|
| 12 | +[100,4,200,1,3,2] |
| 13 | +- ν΄μ μΈνΈ: {100, 4, 200, 1, 3, 2} |
| 14 | +- μμμ μ°ΎκΈ°: 1 (0μ΄ μμ), 100 (99κ° μμ), 200 (199κ° μμ) |
| 15 | +- 1μμ μμ: 1β2β3β4 (κΈΈμ΄ 4) |
| 16 | +- 100μμ μμ: 100λ§ (κΈΈμ΄ 1) |
| 17 | +- 200μμ μμ: 200λ§ (κΈΈμ΄ 1) |
| 18 | +- μ΅λ κΈΈμ΄: 4 |
| 19 | +
|
| 20 | +- for num=1: 0μ΄ μμΌλ―λ‘ μμμ β whileμμ 1,2,3,4 μ²λ¦¬ |
| 21 | +- for num=2: 1μ΄ μμΌλ―λ‘ while μ€ν΅ |
| 22 | +- for num=3: 2κ° μμΌλ―λ‘ while μ€ν΅ |
| 23 | +- for num=4: 3μ΄ μμΌλ―λ‘ while μ€ν΅ |
| 24 | +β κ° μ«μκ° whileμμ 1λ²λ§ |
| 25 | +""" |
| 26 | + |
| 27 | +""" |
| 28 | +μκ°λ³΅μ‘λ: O(n) |
| 29 | +- set(nums) λ³ν: O(n) |
| 30 | +- μΈλΆ for 루ν: O(n)λ² μ€ν |
| 31 | +- while μ΄ μ€ν νμ: μ 체 μκ³ λ¦¬μ¦μμ κ° μ«μκ° while μμμ μ΅λ 1λ²λ§ μ²λ¦¬λ¨ |
| 32 | + β μ΄ while λ΄λΆ μμ
= nλ² β O(n) |
| 33 | +- ν΄μ μ‘°ν: O(1) Γ μ΄ μ‘°ν νμ |
| 34 | +- μ 체: O(n) + O(n) + O(n) = O(n) |
| 35 | +
|
| 36 | +곡κ°λ³΅μ‘λ: O(n) |
| 37 | +- num_set: μ΅λ nκ°μ μλ‘ λ€λ₯Έ μ«μ μ μ₯ -> O(n) |
| 38 | +- κΈ°ν λ³μλ€: O(1) |
| 39 | +- μ 체: O(n) |
| 40 | +""" |
| 41 | + |
| 42 | +class Solution: |
| 43 | + def longestConsecutive(self, nums: List[int]) -> int: |
| 44 | + num_set = set(nums) |
| 45 | + max_length = 0 |
| 46 | + |
| 47 | + |
| 48 | + for num in num_set: |
| 49 | + |
| 50 | + # 루ν μμμ νλ²λ§ μ²λ¦¬ |
| 51 | + if num - 1 not in num_set: |
| 52 | + current_length = 1 |
| 53 | + |
| 54 | + while num + current_length in num_set: |
| 55 | + current_length += 1 |
| 56 | + |
| 57 | + max_length = max(max_length, current_length) |
| 58 | + |
| 59 | + |
| 60 | + return max_length |
| 61 | + |
| 62 | +print(Solution().longestConsecutive([100, 4, 200, 1, 3, 2])) |
| 63 | + |
0 commit comments