디자인 해시셋
구현
MyHashSet 클래스:void add(key) 값key을 HashSet에 삽입합니다. bool contains(key) 값key이 HashSet에 존재하는지 여부를 반환합니다. void remove(key) HashSet에서 값key을 제거합니다. key가 HashSet에 없으면 아무 작업도 수행하지 않습니다. 예 1:
입력
["MyHashSet", "추가", "추가", "포함", "포함", "추가", "포함", "제거", "포함"]
[[], [1], [2], [1], [3], [2], [2], [2], [2]]
산출
[널, 널, 널, 참, 거짓, 널, 참, 널, 거짓]
설명
MyHashSet myHashSet = new MyHashSet();
myHashSet.add(1);//세트 = [1]
myHashSet.add(2);//세트 = [1, 2]
myHashSet.contains(1);//참 반환
myHashSet.contains(3);//False 반환, (찾을 수 없음)
myHashSet.add(2);//세트 = [1, 2]
myHashSet.contains(2);//참 반환
myHashSet.remove(2);//세트 = [1]
myHashSet.contains(2);//False 반환, (이미 제거됨)
제약:
0 <= key <= 106 104 호출은 add , remove 및 contains 로 이루어집니다. 해결책:
import bisect
class MyHashSet:
    def __init__(self):
        self.size = 107
        self.arr = [[] for i in range(self.size)]
    def hfn(self, key):
        key = ((key >> 16) ^ key) * 0x45d9f3b
        key = ((key >> 16) ^ key) * 0x45d9f3b
        key = (key >> 16) ^ key
        return key % self.size
    def add(self, key: int) -> None:
        pos = bisect.bisect_left(self.arr[self.hfn(key)], key)
        if pos >= len(self.arr[self.hfn(key)]) or self.arr[self.hfn(key)][pos] != key:
            self.arr[self.hfn(key)].insert(pos, key)
    def remove(self, key: int) -> None:
        pos = bisect.bisect_left(self.arr[self.hfn(key)], key)
        if pos < len(self.arr[self.hfn(key)]) and self.arr[self.hfn(key)][pos] == key:
            del self.arr[self.hfn(key)][pos]
    def contains(self, key: int) -> bool:
        pos = bisect.bisect_left(self.arr[self.hfn(key)], key)
        if pos < len(self.arr[self.hfn(key)]) and self.arr[self.hfn(key)][pos] == key:
            return True
        return False
# Your MyHashSet object will be instantiated and called as such:
# obj = MyHashSet()
# obj.add(key)
# obj.remove(key)
# param_3 = obj.contains(key)
Reference
이 문제에 관하여(디자인 해시셋), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theabbie/design-hashset-5eo8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)