IT/알고리즘

[Leetcode]706. Design HashMap

어센트 2020. 10. 7. 22:35

Design HashMap - LeetCode

 

Design HashMap - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

해쉬맵을 디자인 하는 방법은 총 2가지 방법이 있다.

  • 개별 체이닝 - 충돌 발생시 연결리스트로 연결
  • 오픈 어드레싱 - 충돌발생시 테이블 공간내 빈공간을 찾아 해결

아래 풀이는 개별체이닝을 이용해 해결한 방법이다.

import collections

class ListNode(object):
    def __init__(self,key = None,value=None):
        self.value = value
        self.key = key
        self.next = None

class MyHashMap:
    def __init__(self):
        self.size = 1000
        self.table = collections.defaultdict(ListNode)

    def put(self,key:int,value:int)->None:
        index = key % self.size
        if self.table[index].value is None:
            self.table[index] = ListNode(key,value)
            return
        p = self.table[index]
        while p:
            if p.key == key:
                p.value = value
                return
            if p.next is None:
                break
            p = p.next
        p.next = ListNode(key,value)

    def get(self,key:int)->int:
        index = key % self.size
        if self.table[index].value is None:
            return -1
        p = self.table[index]
        while p:
            if p.key == key:
                return p.value
            p = p.next
        return -1

    def remove(self,key:int)->None:
        index = key%self.size
        if self.table[index].value is None:
            return

        p = self.table[index]
        if p.key == key:
            self.table[index] = ListNode() if p.next is None else p.next
            return

        prev = p
        while p:
            if p.key ==key:
                prev.next = p.next
                return
            prev, p = p, p.next