랜덤 플립 매트릭스
m x n
이진 그리드matrix
가 있으며 초기에 모든 값이 설정0
되어 있습니다. (i, j)
에서 인덱스 matrix[i][j] == 0
를 임의로 선택하고 1
로 뒤집는 알고리즘을 설계합니다. (i, j)
가 반환될 가능성이 동일한 모든 인덱스matrix[i][j] == 0
.알고리즘을 최적화하여 언어의 내장 임의 함수에 대한 호출 수를 최소화하고 시간 및 공간 복잡성을 최적화합니다.
Solution
클래스를 구현합니다.Solution(int m, int n)
이진 행렬 m
및 n
크기로 객체를 초기화합니다. int[] flip()
[i, j]
행렬의 임의 인덱스matrix[i][j] == 0
를 반환하고 이를 1
로 뒤집습니다. void reset()
행렬의 모든 값을 0
로 재설정합니다. 예 1:
입력
["솔루션", "뒤집기", "뒤집기", "뒤집기", "재설정", "뒤집기"]
[[3, 1], [], [], [], [], []]
산출
[널, [1, 0], [2, 0], [0, 0], 널, [2, 0]]
설명
솔루션 솔루션 = 새로운 솔루션(3, 1);
솔루션.플립();//return [1, 0], [0,0], [1,0], [2,0]은 같은 확률로 반환되어야 합니다.
솔루션.플립();//[2,0]을 반환합니다. [1,0]이 반환되었으므로 [2,0]과 [0,0]
솔루션.플립();//return [0, 0], 이전에 반환된 인덱스를 기준으로 [0,0]만 반환 가능.
솔루션.리셋();//모든 값은 0으로 재설정되며 반환될 수 있습니다.
솔루션.플립();//return [2, 0], [0,0], [1,0], [2,0]은 같은 확률로 반환되어야 합니다.
제약:
1 <= m, n <= 104
flip
에 대한 각 호출에 대해 사용 가능한 셀이 하나 이상 있습니다. 1000
호출이 flip
및 reset
로 이루어집니다. 해결책:
from random import randint
class Solution:
def __init__(self, m: int, n: int):
self.m = m
self.n = n
self.ones = set()
def flip(self) -> List[int]:
i, j = randint(0, self.m - 1), randint(0, self.n - 1)
while (i, j) in self.ones:
i, j = randint(0, self.m - 1), randint(0, self.n - 1)
self.ones.add((i, j))
return [i, j]
def reset(self) -> None:
self.ones.clear()
# Your Solution object will be instantiated and called as such:
# obj = Solution(m, n)
# param_1 = obj.flip()
# obj.reset()
Reference
이 문제에 관하여(랜덤 플립 매트릭스), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theabbie/random-flip-matrix-56fi텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)