LeetCode 519. 随机翻转矩阵(哈希)

1. 题目

题中给出一个 n_rows 行 n_cols 列的二维矩阵,且所有值被初始化为 0。
要求编写一个 flip 函数,均匀随机的将矩阵中的 0 变为 1,并返回该值的位置下标 [row_id,col_id];
同样编写一个 reset 函数,将所有的值都重新置为 0。
尽量最少调用随机函数 Math.random(),并且优化时间和空间复杂度。

注意:
1 <= n_rows, n_cols <= 10000
0 <= row.id < n_rows 并且 0 <= col.id < n_cols
当矩阵中没有值为 0 时,不可以调用 flip 函数
调用 flip 和 reset 函数的次数加起来不会超过 1000 次示例 1:
输入: 
["Solution","flip","flip","flip","flip"]
[[2,3],[],[],[],[]]
输出: [null,[0,1],[1,2],[1,0],[1,1]]示例 2:
输入: 
["Solution","flip","flip","reset","flip"]
[[1,2],[],[],[],[]]
输出: [null,[0,0],[0,1],null,[0,0]]
输入语法解释:
输入包含两个列表:被调用的子程序和他们的参数。
Solution 的构造函数有两个参数,分别为 n_rows 和 n_cols。
flip 和 reset 没有参数,参数总会以列表形式给出,哪怕该列表为空

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/random-flip-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:LeetCode 398. 随机数索引(概率)

2.1 超时解

  • 矩阵很大的时候,翻得时候效率很低,会碰到翻过的,还要去重新翻
class Solution {    //超时vector<int> grid;int m, n;int x, y, pos;
public:Solution(int n_rows, int n_cols) {grid = vector<int> (n_rows*n_cols, 0);m = n_rows;n = n_cols;}vector<int> flip() {do{pos = rand()%(m*n);}while(grid[pos] == 1);grid[pos] = 1;return {pos/n, pos-pos/n*n};}void reset() {grid = vector<int> (m*n, 0);}
};

2.2 转一维,每次缩小范围

  • 记录总共的元素个数N,随机获取 0 ~ N-1 的 pos
  • 如果map中有key = pos,则 pos = map[pos],如果没有,pos就是pos
  • 还需要把当前取的位置的 map的 value 更新为最后一个位置的,下一轮,最后那个位置就跳过了
    在这里插入图片描述
class Solution {unordered_map<int,int> map;int m, n, num;int x, y, pos, prev;
public:Solution(int n_rows, int n_cols) {m = n_rows;n = n_cols;num = m*n;}vector<int> flip() {if(num == 0) return {};pos = rand()%(num);num--;//下一轮,减少一个数if(map.count(pos))//map包含pos的key{prev = pos;//记录当前pospos = map[pos];//真实的取走的posif(!map.count(num))//把最后一个位置的数换到当前map[prev] = num;else//如果最后一个位置有map值,用其值替换map[prev] = map[num];}else//map不包含pos的key{	//pos就是当前位置,只需把末尾的数替换到当前,同上if(!map.count(num))map[pos] = num;elsemap[pos] = map[num];}x = pos/n;y = pos-x*n;return {x, y};}void reset() {num = m*n;map.clear();}
};

36 ms 18.6 MB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

迪士尼手机官方专卖东家京破产

迪士尼手机业务一向都在不时的展开&#xff0c;迪士尼品牌各种周边主题手机掉掉了MM们的喜好。上个月脱手脱手&#xff0c;迪士尼在日本推出了特别版的Android智好手机&#xff0c;并举办了大面积的电视告白推行&#xff0c;昨天迪士尼挪动在东京市中心开放了他们的官方实体专…

通过 .NET Framework 中的 XPath 和 XSLT API 方便地操作 XML 数据

本文假设您熟悉 Visual Basic .NET 下载本文的代码&#xff1a; XPathandXSLT.exe (166KB) 摘要 XPath 是一种正在兴起的通用查询语言。通过 XPath&#xff0c;可以在基于 XML 的数据源中识别和处理一组相关的节点。XPath 提供了一个基础结构&#xff0c;它是 .NET Framewo…

测试网络机顶盒的软件,2018网络机顶盒装机必备的几款系统工具,亲测好用

很多用户都喜欢比较网络机顶盒的配置&#xff0c;可是配置固然重要&#xff0c;如果没有好的日常保护&#xff0c;网络机顶盒受损程度也会很大。高配置的网络机顶盒在长时间使用后&#xff0c;也会出现卡顿&#xff0c;运行变慢等问题。今天给大家介绍几款系统工具&#xff0c;…

测试一体机风扇分贝软件,9款小风扇深度横评,风力、噪音测试加拆解,告诉你谁最值得买...

炎热的夏天又又又来了&#xff01;虽然现在家里、办公室都有空调&#xff0c;但是当我们刚从暴热的室外进入室内时&#xff0c;空调还是很难让我们快速拥有舒爽温度&#xff0c;很多人都会选择一个台式小风扇作为辅助降温产品。但市面上的风扇品牌繁多&#xff0c;怎么才能选择…

计算机摄像头打不开,电脑摄像头打不开、用不了怎么办(操作简单),这几步你要了解...

有时候我们会遇到在开视频时电脑无法打开摄像头&#xff0c;这有可能是摄像头本身就有问题&#xff0c;也有可能是因为权限设置美没有到位&#xff0c;导致摄像头不能打开。今天咱们来解决一下&#xff0c;电脑摄像头无法打开的问题。工具/材料鲁大师或者360驱动大师等可以修改…

fiddler怎么修改服务器返回数据,基于Fiddler实现修改接口返回数据进行测试

方法介绍与比对在测试的过程中&#xff0c;有的需求是这样的&#xff0c;它需要你修改接口返回的数据&#xff0c;从而检查在客户端手机app内是否显示正确&#xff0c;这也算是一种接口容错测试&#xff0c;接口容错测试属于app性能(专项)测试的其中一种。通过Fiddler我们可以有…

LeetCode 886. 可能的二分法(着色DFS/BFS/拓展并查集)

文章目录1. 题目2. 解题2.1 DFS2.2 BFS2.3 并查集1. 题目 给定一组 N 人&#xff08;编号为 1, 2, …, N&#xff09;&#xff0c; 我们想把每个人分进任意大小的两组。 每个人都可能不喜欢其他人&#xff0c;那么他们不应该属于同一组。 形式上&#xff0c;如果 dislikes[i…

LeetCode 685. 冗余连接 II(并查集)

1. 题目 在本问题中&#xff0c;有根树指满足以下条件的有向图。该树只有一个根节点&#xff0c;所有其他节点都是该根节点的后继。 每一个节点只有一个父节点&#xff0c;除了根节点没有父节点。 输入一个有向图&#xff0c;该图由一个有着N个节点 (节点值不重复1, 2, …, N…

红黑树的c++完整实现源码

红黑树的c完整实现源码 作者&#xff1a;July、saturnman。时间&#xff1a;二零一一年三月二十九日。出处&#xff1a;http://blog.csdn.net/v_JULY_v。声明&#xff1a;版权所有&#xff0c;侵权必究。------------------------------------------- 前言&#xff1a; 本人…

[Kesci] 新人赛 · 员工满意度预测

文章目录1. 导入工具包2. 读取数据3. 特征处理3.1 数字特征归一化3.2 文字特征处理3.3 特征合并4. 定义模型训练5. 预测6. 新人赛结果竞赛地址 使用 sklearn Pipeline 模板 1. 导入工具包 %matplotlib inline import numpy as np import matplotlib.pyplot as plt plt.rcPar…

webusercontrol ajax,ASP.NET页面使用AjaxPro2完成JS调用后台方法

一、首先下载AjaxPro.2.dll(附下载地址)百度网盘链接&#xff1a;https://pan.baidu.com/s/1r87DE1Tza9F4NbJwTCS1AQ提取码&#xff1a;10p6二、在Visual studio中创建空Web项目&#xff0c;并将AjaxPro.2.dll复制到bin目录下&#xff0c;包括在项目中三、打开Web.config文件&a…

LeetCode 1109. 航班预订统计(差分思想)

1. 题目 这里有 n 个航班&#xff0c;它们分别从 1 到 n 进行编号。 我们这儿有一份航班预订表&#xff0c;表中第 i 条预订记录 bookings[i] [i, j, k] 意味着我们在从 i 到 j 的每个航班上预订了 k 个座位。 请你返回一个长度为 n 的数组 answer&#xff0c;按航班编号顺…

王者荣耀8月15日服务器维护,王者荣耀8月15日更新维护到什么时候 王者荣耀8月15日更新时间分享...

《王者荣耀》5V5英雄公平对战手游&#xff0c;腾讯最新MOBA大作&#xff01;5V5、3v3、1v1&#xff0c;多样模式一键体验&#xff0c;海量英雄随心选择&#xff01;10秒实时跨区匹配&#xff0c;与好友组队...类型&#xff1a;动作冒险大小&#xff1a;792.06M语言&#xff1a;…

LeetCode 84. 柱状图中最大的矩形(单调递增栈)

文章目录1. 题目2. 解题1. 题目 题目链接 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 以上是柱状图的示例&#xff0c;其中每个柱子的宽度为 1&am…

LeetCode 第 27 场双周赛(1125/1966,前57.2%)

文章目录1. 比赛结果2. 题目1. LeetCode 5408. 通过翻转子数组使两个数组相等 easy2. LeetCode 5409. 检查一个字符串是否包含所有长度为 K 的二进制子串 medium3. LeetCode 5410. 课程安排 IV medium &#xff08;Floyd-Warshall&#xff09;4. LeetCode 5411. 摘樱桃 II hard…

修改mysql文件的存储路径

使用本地数据库时&#xff0c;常常会发生磁盘爆满变红的情况&#xff0c;特别是C盘&#xff0c;这时候我们希望将mysql本地数据库存储的文件移动到D盘或者E盘&#xff0c;下面是手动调整的办法&#xff1a;1.关闭mysql服务&#xff1b; 左下角开始处输入“服务”&#xff0c;回…

Dynamic programming solving ULS

转载于:https://www.cnblogs.com/elitez/archive/2011/04/21/2024095.html

Excel里,vlookup函数各种应用-匹配多列、多条件匹配

1.vlookup函数常规应用&#xff1a;一个条件匹一列数据&#xff1b; 示例公式&#xff1a;VLOOKUP(A2,test!$A$2:$B$53,2,0) 其中&#xff1a;A2是目标表的匹配条件&#xff08;学号&#xff09;&#xff1b;test!$A$2:$B$53是被匹配表的数据列&#xff1b;2是指被匹配数据列…

LeetCode 1466. 重新规划路线(DFS/BFS)

文章目录1. 题目2. 解题2.1 DFS2.2 BFS1. 题目 n 座城市&#xff0c;从 0 到 n-1 编号&#xff0c;其间共有 n-1 条路线。因此&#xff0c;要想在两座不同城市之间旅行只有唯一一条路线可供选择&#xff08;路线网形成一颗树&#xff09;。 去年&#xff0c;交通运输部决定重新…

MySQL 基本查询、条件查询、投影查询

文章目录1. 基本查询2. 条件查询3. 投影查询练习 LeetCode 595. 大的国家练习 LeetCode 584. 寻找用户推荐人练习 LeetCode 1173. 即时食物配送 I练习 LeetCode 610. 判断三角形学习自 廖雪峰的官方网站 1. 基本查询 SELECT * FROM <表名>*表示所有内容 许多检测工具…