|
| 1 | +""" |
| 2 | +Constraints: |
| 3 | +
|
| 4 | +1 <= nums.length <= 10^5 |
| 5 | +-10^4 <= nums[i] <= 10^4 |
| 6 | +k is in the range [1, the number of unique elements in the array]. |
| 7 | +
|
| 8 | +nums λ°°μ΄μμ μμλ€μ λΉλμ μ€, κ°μ₯ λΉλμκ° λμ kκ°μ μλ€ λ°ν |
| 9 | +
|
| 10 | +Time Complexity: O(klogn) |
| 11 | +
|
| 12 | +λ΄λΆμ μΌλ‘ μ λ ¬λλ O(logn)μ κ°μ§λ μ΅μ ν μ¬μ©? |
| 13 | +
|
| 14 | +μ°μ λΉλμ μ¬μ μ κΈ°λ‘ -> dict[μ«μ] = λΉλμ O(n) |
| 15 | +κ·Έ λ€μ, μ¬μ .items() λλ©΄μ heap μ kκ° λ§νΌ λ£κΈ° O(k * logn) |
| 16 | +
|
| 17 | +kκ° λ§νΌ μ°μ μμ νμ λ£κΈ° (-λΉλμ, μ«μ) -> νν λ£μΌλ©΄ 첫λ²μ¨° μμκΈ°μ€μΌλ‘ μ λ ¬λ¨ |
| 18 | +
|
| 19 | +κ·Έλ¦¬κ³ , λλ¨Έμ§ μ¬μ .items() λ§νΌ for i in range(k + 1, n) λ§νΌλ§ λκΈ° |
| 20 | +-> λ§μ½ νμ 맨 μ κ°λ³΄λ€ μμΌλ©΄ λ£κ³ , μλλΌλ©΄ pass |
| 21 | +
|
| 22 | +Space Complexity: O(n) |
| 23 | +
|
| 24 | +numsλ§νΌ μ¬μ μ λΉλμ μ μ₯ |
| 25 | +
|
| 26 | +# κ°κ³Όν μ¬μ€ |
| 27 | +첫 kκ°λ§ μ°μ μμ νμ λ£κ³ , λλ¨Έμ§ n - k λ§νΌ λλ, |
| 28 | +νμ 맨 μ κ°λ³΄λ€ μκ±°λ κ°μ λ -> 맨 μ κ°μ λΉΌλ©΄ μλ¨!! κ·Έκ² μ λ΅ μ μ€ νλμΌ μ μμ |
| 29 | +
|
| 30 | +
|
| 31 | +μλΏμΈ..맨 μ κ°λ§ μ λ ¬λμ΄μλ μνλΌ, λ§μ§λ§ κ° λ°ν μ heappopμΌλ‘ ν΄μ€μΌν λ―! |
| 32 | +λ¨μν for i in range(k) ν΄μ 맨 μ k κ°λ₯Ό λ°ννλ©΄ μ λ ¬λμ§ μμ μνμμ κ°μ λ½μλ΄λ―λ‘ ν릴 μ μμ |
| 33 | +
|
| 34 | +# λ°λ‘ |
| 35 | +
|
| 36 | +[2,3,4,1,4,0,4,-1,-2,-1] |
| 37 | +
|
| 38 | +맨 μμ κ°μ΄λλ§ λΉκ΅νλ€λ³΄λ, μ΅λ λΉλμ κ°μ μ νν λμ€λλ° λ λ²μ§Έ μ΄ν κ°μ΄ 첫 λ²μ§Έ κ°λ³΄λ€ μμ§ μμμ νμ λͺ» λ€μ΄μ¨λ€.. |
| 39 | +κ·Έλμ, 맨 μμ κ° λΉκ΅ λ‘μ§ μμ°!! |
| 40 | +
|
| 41 | +νμ§λ§, ν λ΄ μμλ₯Ό kκ°λ₯Ό μ μ§ λͺ»ν΄μ μ λ ¬ μκ°μ΄ log N μ΄ λμ΄λ²λ¦Ό.. |
| 42 | +-> heapμ μ¬μ΄μ¦λ₯Ό kλ‘ μ μ§νλ©΄μ μμ λΉλ μλΆν° μ κ±°νλ©΄, |
| 43 | +κ²°κ΅ heap μμλ κ°μ₯ λ§μ΄ λ±μ₯ν kκ°μ μμλ§ λ¨λλ€. |
| 44 | +""" |
| 45 | + |
| 46 | +from collections import defaultdict |
| 47 | +from heapq import heappush, heappop |
| 48 | + |
| 49 | + |
| 50 | +class Solution: |
| 51 | + def topKFrequent(self, nums: List[int], k: int) -> List[int]: |
| 52 | + freq_dict = defaultdict(int) |
| 53 | + min_heap = [] |
| 54 | + ret = [] |
| 55 | + |
| 56 | + for n in nums: |
| 57 | + freq_dict[n] += 1 |
| 58 | + |
| 59 | + for key, value in freq_dict.items(): |
| 60 | + heappush(min_heap, (value, key)) |
| 61 | + if len(min_heap) > k: |
| 62 | + heappop(min_heap) |
| 63 | + |
| 64 | + for _ in range(k): |
| 65 | + ret.append(heappop(min_heap)[1]) |
| 66 | + |
| 67 | + return ret |
0 commit comments