LeetCode 519随机翻转矩阵[Map] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 519随机翻转矩阵[Map] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
为了满足等于0的下标被选取的概率应当相等的条件,之前选过翻转的下标就不要选择了,只关注未被翻转过的,那么为了实现这个目标,需要对翻转后的下标与很靠后未反转的下标形成映射,因为我们每次随机生成的下标是有范围的,并且每生成一次就要减少1,这会导致最后一位永远都随机不到,既然随机不到,那么让可以随机到的但是被翻过的与其进行映射,这样直接映射的话就更为公平了,满足条件,代码如下:
class Solution
private:
int m;
int n;
iont total;
unordered_map<int, int> mp;
public:
Solution(int m, int n)
this->m = m;
this->n = n;
this->total = m * n;
vector<int> flip()
int choose = rand() % total;
int temp = choose;
while(!mp.count(temp))
temp = mp[temp];
mp[choose] = total - 1;
void reset()
total = m * n;
mp.clear();
;
/**
* Your Solution object will be instantiated and called as such:
* Solution* obj = new Solution(m, n);
* vector<int> param_1 = obj->flip();
* obj->reset();
*/
以上是关于LeetCode 519随机翻转矩阵[Map] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
解题报告Leecode 519. 随机翻转矩阵——Leecode每日一题系列
LeetCode 458. 可怜的小猪(找毒药问题) / 700. 二叉搜索树中的搜索 / 519. 随机翻转矩阵(哈希表记录交换位置)