519.随机翻转矩阵-python
519.随机翻转矩阵(中等)
题目大意:给你一个 m x n 的二元矩阵 matrix ,且所有值被初始化为 0 。请你设计一个算法,随机选取一个满足 matrix[i][j] == 0 的下标 (i, j) ,并将它的值变为 1 。所有满足 matrix[i][j] == 0 的下标 (i, j) 被选取的概率应当均等。
尽量最少调用内置的随机函数,并且优化时间和空间复杂度。
实现 Solution 类:
- Solution(int m, int n) 使用二元矩阵的大小 m 和 n 初始化该对象
- int[] flip() 返回一个满足 matrix[i][j] == 0 的随机下标 [i, j] ,并将其对应格子中的值变为 1
- void reset() 将矩阵中所有的值重置为 0
题目
给你一个 m x n 的二元矩阵 matrix ,且所有值被初始化为 0 。请你设计一个算法,随机选取一个满足 matrix[i][j] == 0 的下标 (i, j) ,并将它的值变为 1 。所有满足 matrix[i][j] == 0 的下标 (i, j) 被选取的概率应当均等。
尽量最少调用内置的随机函数,并且优化时间和空间复杂度。
实现 Solution 类:
- Solution(int m, int n) 使用二元矩阵的大小 m 和 n 初始化该对象
- int[] flip() 返回一个满足 matrix[i][j] == 0 的随机下标 [i, j] ,并将其对应格子中的值变为 1
- void reset() 将矩阵中所有的值重置为 0
示例:
1 |
|
提示:
- 1 <= m, n <= 104
- 每次调用flip 时,矩阵中至少存在一个值为 0 的格子。
- 最多调用 1000 次 flip 和 reset 方法。
分析和解答
这个题如果未来会被问到的话,首先需要自己熟悉一下手写基础框架
1 |
|
目前使用一种非常简单的方法就解决了,每次随机一个[0, m-1],随机一个[0, n-1](使用random.randint(a, b),注意这里a,b都是闭区间的),用一个dict判断d[(rand_m, rand_n)]是否有,如果有就一直重新随机,直到不存在,不存在的情况下加入dict。清空则就是清空词典。但这个运气最差得情况下会调用很多次随机函数,所以实际上不符合题意的,只是比较简单实现,暂时不属于hot100题就未来补充了。
1 |
|
优化解法(减少随机函数的调用次数)待补充
519.随机翻转矩阵-python
http://example.com/2021/12/03/algorithms/leetcode-python/519-随机翻转矩阵-python/