文章目录

  • 题目描述
  • 思路 && 代码

题目描述

  • 又是涉及到均等概率的随机

思路 && 代码

  • 用的题解区三叶的代码~写得是真的好!不论题目,但抄一遍代码都能觉得有收获!
  • 维度转化:并没有创造二维数组(太大了)。而是转化成一维的场景。
  • 双指针:每次随机一个[0, m * n)的值,然后向左、向右查找第一个没访问过的值
class Solution {int m;int n;Random random = new Random();Set<Integer> set = new HashSet<>(); // 记录访问public Solution(int m, int n) {this.m = m;this.n = n;}public int[] flip() {int toLeft = random.nextInt(m * n), toRight = toLeft; // 双指针,双向延伸while(toLeft >= 0 && set.contains(toLeft)) toLeft--;while(toRight < m * n && set.contains(toRight)) toRight++;int index = toLeft >= 0 && !set.contains(toLeft) ? toLeft : toRight; // 二选一set.add(index);return new int[]{index / n, index % n}; // 一维 =》二维}public void reset() {set.clear();}
}
  • 自己写一遍:
class Solution {int m, n;Set<Integer> set = new HashSet<>();Random random = new Random();public Solution(int m, int n) {this.m = m;this.n = n;}public int[] flip() {int toLeft = random.nextInt(m * n), toRight = toLeft;while(toLeft >= 0 && set.contains(toLeft)) toLeft--;while(toRight < m * n && set.contains(toRight)) toRight++;int index = toLeft >= 0 && !set.contains(toLeft) ? toLeft : toRight;set.add(index);return new int[]{index / n, index % n};}public void reset() {set.clear();}
}

【LeetCode笔记 - 每日一题】519. 随机翻转矩阵(Java、随机、双指针)相关推荐

  1. 【LeetCode笔记 - 每日一题】375. 猜数字游戏 II (Java、DFS、动态规划)

    文章目录 题目描述 思路 && 代码 DFS 动态规划 新系列-用于区分开高频题和每日一题- 题目描述 一眼二分,但是实际上并不是 这题让我想到社团的猜数字游戏-但是给钱是真过分了= ...

  2. 【LeetCode笔记 - 每日一题】384. 打乱数组(Java、洗牌算法)

    文章目录 题目描述 思路 && 代码 题目描述 中等题,很赞!第一次碰到涉及洗牌算法的题 有点涉及概率,主要是要实现公平的随机 思路 && 代码 采用了 Knuth 洗 ...

  3. 【LeetCode笔记 - 每日一题】373. 查找和最小的 K 对数字(Java、堆、优先队列)

    文章目录 题目描述 思路 && 代码 题目描述 几天没打题,感觉脑子都是一团浆糊.... 升序:肯定得用这条件来优化复杂度 数对:用 int[2] 来表示 思路 && ...

  4. 【LeetCode笔记 - 每日一题】334. 递增的三元子序列(Java、偏思路)

    文章目录 题目描述 思路 && 代码 题目描述 可以转换成300. 最长递增子序列,再看结果是否大于3 但上述写法O(N)复杂度实现不了,还是得用针对这道题的写法(见下) 思路 &am ...

  5. 【LeetCode笔记 - 每日一题】423. 从英文中重建数字(Java、字符串、偏思路)

    文章目录 题目描述 思路 && 代码 题目描述 看了题目以后想到啥? 字符数量统计 银行家算法逐个拆解 建立数字 - 字符串的全局映射 思路 && 代码 抄答案了,采取 ...

  6. 【LeetCode笔记 - 每日一题】318. 最大单词长度乘积(Java、位运算)

    文章目录 题目描述 思路 && 代码 题目描述 挺不错!有bitmap的感觉了. 思路 && 代码 思路好想:两两对比,无公共判断,维护 res 那么,如何进行公共判断 ...

  7. java水平翻转矩阵_Java实现 LeetCode 519 随机翻转矩阵

    519. 随机翻转矩阵 题中给出一个 n 行 n 列的二维矩阵 (n_rows,n_cols),且所有值被初始化为 0.要求编写一个 flip 函数,均匀随机的将矩阵中的 0 变为 1,并返回该值的位 ...

  8. Java实现 LeetCode 519 随机翻转矩阵

    519. 随机翻转矩阵 题中给出一个 n 行 n 列的二维矩阵 (n_rows,n_cols),且所有值被初始化为 0.要求编写一个 flip 函数,均匀随机的将矩阵中的 0 变为 1,并返回该值的位 ...

  9. 519. 随机翻转矩阵

    519. 随机翻转矩阵 给你一个 m x n 的二元矩阵 matrix ,且所有值被初始化为 0 .请你设计一个算法,随机选取一个满足 matrix[i][j] == 0 的下标 (i, j) ,并将 ...

最新文章

  1. Linux下安装java(Ubuntu为例)
  2. S/4HANA CLOUD 年度九大新功能(2020)
  3. iphone相册储存空间已满_无需第三方APP,加密 iPhone 中的照片
  4. 怎么样给单选按钮前面插入小图标
  5. 【模板】并查集 两种路径压缩写法(类模板和函数模板)
  6. 【cudnn】cudnn 安装
  7. 论文浅尝 | 利用开放域触发器知识改进事件检测
  8. istio springcloud_手牵手一起学Springcloud(1)微服务这么流行,你理解了嘛?
  9. oracle 拼接_老品牌福建泉州49寸液晶拼接屏多少钱品质
  10. Vscode下安装Go语言及其插件
  11. echarts Map(地图) 不同颜色区块显示
  12. 从零开始学习OpenWrt完美教程
  13. 基于java的超市积分管理系统设计(含源文件)
  14. 永恒之蓝漏洞复现(MS17010)
  15. matlab模型辨识工具箱的使用
  16. mysql 脏页刷新_InnoDB脏页刷新机制
  17. mysql data::dumper_初始化mysql数据库提示缺少Data:dumper模块解决方法
  18. C语言二维数组范德蒙,2、编写一个程序,实现一个3×4矩阵转置。
  19. cesium颜色值赋值
  20. CAD版本转换,手机该如何转换操作呢?

热门文章

  1. Leetcode--24. 两两交换链表中的结点
  2. 北师大计算机试题五答案,北京师范大学计算机软件及理论2022考研招生分析、参考书、真题等复习指导解析...
  3. shell for循环1到100_浅谈Linux下shell 编程的for循环常用的6种结构
  4. cmd测试cuda安装_安装:anaconda+cuda+pytorch+pycharm
  5. OpenCV示例学习(二): 基本图形绘制算子:line(),circle(),fillPoly(), ellipse()
  6. 7.Mysql数据库表引擎与字符集
  7. itext实现HTML转换为PDF
  8. Java并发编程实战~原子类
  9. redis取出list最边的一个_六、Redis列表(list)类型参考记录(1)
  10. 天池CV学习赛:街景字符识别-思路与上分技巧汇总