Java实现 LeetCode 519 随机翻转矩阵
2023-09-14 08:58:04 时间
519. 随机翻转矩阵
题中给出一个 n 行 n 列的二维矩阵 (n_rows,n_cols),且所有值被初始化为 0。要求编写一个 flip 函数,均匀随机的将矩阵中的 0 变为 1,并返回该值的位置下标 [row_id,col_id];同样编写一个 reset 函数,将所有的值都重新置为 0。尽量最少调用随机函数 Math.random(),并且优化时间和空间复杂度。
注意:
1.1 <= n_rows, n_cols <= 10000
- 0 <= row.id < n_rows 并且 0 <= col.id < n_cols
3.当矩阵中没有值为 0 时,不可以调用 flip 函数
4.调用 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 没有参数,参数总会以列表形式给出,哪怕该列表为空
PS:
自己映射一个数组
class Solution {
Map<Integer, Integer> V = new HashMap<>();
int nr, nc, rem;
Random rand = new Random();
public Solution(int n_rows, int n_cols) {
nr = n_rows;
nc = n_cols;
rem = nr * nc;
}
public int[] flip() {
int r = rand.nextInt(rem--);
int x = V.getOrDefault(r, r);
V.put(r, V.getOrDefault(rem, rem));
return new int[]{x / nc, x % nc};
}
public void reset() {
V.clear();
rem = nr * nc;
}
}
/**
* Your Solution object will be instantiated and called as such:
* Solution obj = new Solution(n_rows, n_cols);
* int[] param_1 = obj.flip();
* obj.reset();
*/
相关文章
- java反转数组_Java实现数组反转翻转的方法实例
- java软件工程师是做什么的_JAVA软件工程师是做什么的?
- eclipse怎么导入java文件_Eclipse如何导入JAVA工程?如何将项目导入Eclipse中?
- java后端开发需要什么_从事Java后端开发,要学习哪些知识和技能?[通俗易懂]
- java有什么作用_Java有什么用「建议收藏」
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- java webservice实现_JAVA WebService的实现方式
- 手机版java编译器_Java编译器[通俗易懂]
- JAVA数据库连接池_java与数据库的连接怎么实现
- 【错误记录】Android Studio 4.2.1 编译报错 ( 设置支持的 Java 和 Kotlin 版本 | java.lang.BootstrapMethodError )
- MySQL与Java的无缝互联(java与mysql连接)
- Java问题-java进程占用内存过高,排查原因详解编程语言
- 服务器实现Java远程访问Linux服务器(java远程linux)
- Linux下Java编程之旅(linux执行java)
- 数据库Java连接MySQL数据库实现数据添加(java添加mysql)
- Linux下配置Java环境变量的简易指南(linux配置java环境变量)
- 实现Java实现Redis集合的技术研究(redis集合java)
- 使用Java实现Redis数据存储(redis集成java)
- 应用『Java应用程序中Redis缓存的使用』(redis缓存与java)
- 连接MySQL连接技术之Java实现(java的mysql)
- 程序Oracle调用Java程序的实现方法(oracle调用java)
- Java操作Redis实现数据快速存取(java访问redis)
- 实现高并发:Java利用Redis秒杀成功(java秒杀redis)
- 使用Java连接SQL Server数据库,轻松实现数据交互(java连sqlserver)
- Java与MySQL共同构建良好的数据表(java mysql 表)
- Java程序调用Linux系统命令实现更多功能(java调用linux命令)
- Java锁表与Oracle数据库协调实现数据安全(java锁表oracle)
- Java迭代Oracle实现数据库更高性能(java迭代oracle)
- Java连接Oracle实现简单快捷的数据传输(java联结oracle)
- Java实现与Oracle数据库的无缝整合(java整合oracle)
- Java 开发提升Oracle数据库性能(java开发oracle)
- Redis实现Java语言下的遍历处理(redis遍历java)