[NeetCode/Python] Kth Largest Integer in a Stream

2024. 9. 3. 02:13·Algorithm/NeetCode

문제: https://neetcode.io/problems/kth-largest-integer-in-a-stream

 

NeetCode

 

neetcode.io

 

문제에서 제공하는대로 리스트에 숫자를 더 추가하고, 매 리스트에서 k번째로 가장 큰 숫자를 리턴하는 것이다.

 

[내 코드]

class KthLargest:

    def __init__(self, k: int, nums: List[int]):
        self.k = -k
        self.nums = sorted(nums)
        return

    def add(self, val: int) -> int:
        self.nums.append(val)
        self.nums = sorted(self.nums)
        return self.nums[self.k]

 

정말 단순한 풀이.. add를 시킬 때마다 정렬을 하고, 그 리스트에서 k번째 숫자를 리턴한다.

시간 복잡도가 상당한 풀이라 더 좋은 풀이가 없나 고민하면 좋았을 텐데 우선 푸는것에 집중했다 😅 (스터디 마감 시간 다돼서 촉박하게 풀었다..)

 

[솔루션 코드]

class KthLargest:
    
    def __init__(self, k: int, nums: List[int]):
        self.minHeap, self.k = nums, k
        heapq.heapify(self.minHeap)
        while len(self.minHeap) > k:
            heapq.heappop(self.minHeap)

    def add(self, val: int) -> int:
        heapq.heappush(self.minHeap, val)
        if len(self.minHeap) > self.k:
            heapq.heappop(self.minHeap)
        return self.minHeap[0]

 

heap을 쓰면 된다니!!! 자료구조에 다시 익숙해져야 한다!! 최댓값, 최솟값 찾는건 완전 이진트리, 더 나아가 힙을 바로 떠올려야 한다!!

heapq.heapify : 리스트를 힙으로 변환한다. O(n)

어짜피 k번째로 큰 숫자들만 관리하면 되므로, k개의 숫자만 관리하면 된다.

minHeap으로 관리하면서 k개를 맞추기 위해 작은 숫자들은 pop해주면, root값이 바로 k번째로 큰 숫자가 된다!

(maxHeap을 만들고 싶다면 음수로 숫자를 관리하면 될 듯)

 

천재... 진짜 알고리즘은 풀면서 자극 받는 이런 맛이 있다.. 실무하면서 굳어진 뇌를 말랑말랑하게 풀어가는 중이다!

 

시간 복잡도

n은 nums의 길이

-> 내 풀이: O(n)

-> 솔루션: O(logn), init t시에는 O(n)

 

'Algorithm > NeetCode' 카테고리의 다른 글

[NeetCode/Python] Buy and Sell Crypto  (0) 2024.09.19
[NeetCode/Python] Min Cost Climbing Stairs  (0) 2024.09.19
[NeetCode/Python] Two Integer Sum  (0) 2024.08.31
[NeetCode/Python] Plus One  (0) 2024.08.30
[NeetCode/Python] Climbing Stairs  (0) 2024.08.17
'Algorithm/NeetCode' 카테고리의 다른 글
  • [NeetCode/Python] Buy and Sell Crypto
  • [NeetCode/Python] Min Cost Climbing Stairs
  • [NeetCode/Python] Two Integer Sum
  • [NeetCode/Python] Plus One
빵빵0
빵빵0
(아직은) 공부하고 정리하는 블로그입니다.
  • 빵빵0
    Hack Your World
    빵빵0
  • 전체
    오늘
    어제
    • 분류 전체보기 (92)
      • Error Handling (7)
      • Project (5)
        • MEV (2)
      • Architecture (0)
        • API (0)
        • Cache (0)
        • 사소한 고민거리 (0)
      • Computer Science (4)
        • Data Structure (2)
        • Database (1)
        • Cloud (0)
        • OS (0)
        • Infra, Network (1)
        • AI (0)
      • Language (8)
        • Go (8)
        • Rust (0)
        • Python (0)
        • Java (0)
      • Algorithm (40)
        • BaekJoon (18)
        • Programmers (7)
        • LeetCode (6)
        • NeetCode (9)
      • SW Books (9)
        • gRPC Up & Running (1)
        • System Design Interview (2)
        • 스프링 입문을 위한 자바 객체지향의 원리와 이해 (6)
        • 블록체인 해설서 (0)
        • 후니의 쉽게 쓴 CISCO 네트워킹 (0)
      • BlockChain (4)
        • Issues (0)
        • Research (4)
        • Tech (0)
      • Own (8)
        • TIR(Today I Read) (3)
        • Personal (2)
        • Novel (0)
        • Memo (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    LeetCode
    EVM
    BFS
    NeetCode
    MEV
    MongoDB
    프로그래머스
    스택
    two pointer
    chart
    go
    블록체인
    goroutine
    KBW
    Programmers
    큐
    BEAKJOON
    백준
    Hash Table
    golang
    ethereum
    Greedy
    Palindrome
    Python
    DP
    BaekJoon
    blockchain
    context
    2024
    candlechart
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
빵빵0
[NeetCode/Python] Kth Largest Integer in a Stream
상단으로

티스토리툴바