삽입 삭제 GetRandom O(1)
RandomizedSet 클래스를 구현합니다.RandomizedSet() RandomizedSet 개체를 초기화합니다. bool insert(int val) 항목val이 없는 경우 집합에 항목을 삽입합니다. 항목이 없으면 true를 반환하고 그렇지 않으면 false를 반환합니다. bool remove(int val) 항목val이 있는 경우 세트에서 제거합니다. 항목이 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다. int getRandom() 현재 요소 집합에서 임의의 요소를 반환합니다(이 메소드가 호출될 때 적어도 하나의 요소가 존재함을 보장함). 각 요소는 반환될 확률이 같아야 합니다. 각 함수가 평균
O(1) 시간 복잡도에서 작동하도록 클래스의 함수를 구현해야 합니다.예 1:
입력
["RandomizedSet", "삽입", "제거", "삽입", "getRandom", "제거", "삽입", "getRandom"]
[[], [1], [2], [2], [], [1], [2], []]
산출
[널, 참, 거짓, 참, 2, 참, 거짓, 2]
설명
RandomizedSet randomizedSet = new RandomizedSet();
randomizedSet.insert(1);//집합에 1을 삽입합니다. 1이 성공적으로 삽입되었으므로 true를 반환합니다.
randomizedSet.remove(2);//집합에 2가 없으므로 false를 반환합니다.
randomizedSet.insert(2);//집합에 2를 삽입하고 true를 반환합니다. 세트는 이제 [1,2]를 포함합니다.
randomizedSet.getRandom();//getRandom()은 무작위로 1 또는 2를 반환해야 합니다.
randomizedSet.remove(1);//집합에서 1을 제거하고 true를 반환합니다. 이제 세트에 [2]가 포함됩니다.
randomizedSet.insert(2);//2는 이미 집합에 있으므로 false를 반환합니다.
randomizedSet.getRandom();//2가 집합의 유일한 숫자이므로 getRandom()은 항상 2를 반환합니다.
제약:
-231 <= val <= 231 - 1 2 * 105 호출은 insert , remove 및 getRandom 로 이루어집니다. getRandom가 호출되면 데이터 구조에 하나 이상의 요소가 있습니다. 해결책:
import random
class RandomizedSet:
def __init__(self):
self.set = set()
def insert(self, val: int) -> bool:
if val not in self.set:
self.set.add(val)
return True
return False
def remove(self, val: int) -> bool:
if val in self.set:
self.set.remove(val)
return True
return False
def getRandom(self) -> int:
return random.choice(list(self.set))
# Your RandomizedSet object will be instantiated and called as such:
# obj = RandomizedSet()
# param_1 = obj.insert(val)
# param_2 = obj.remove(val)
# param_3 = obj.getRandom()
Reference
이 문제에 관하여(삽입 삭제 GetRandom O(1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theabbie/insert-delete-getrandom-o1-320o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)