leetcode-166周赛-5282-转化为全0矩阵的最小反转次数
题目描述:


方法一:暴力BFS
class Solution:
def minFlips(self, mat) -> int:
R, C = len(mat), len(mat[0]) def helper(mat):
return tuple(tuple(row) for row in mat) visited = set()
queue = collections.deque()
mat_ = helper(mat)
visited.add(mat_)
queue.append(mat)
ans = 0
while queue:
for _ in range(len(queue)):
cur = queue.popleft()
if sum(sum(row) for row in cur) == 0:
return ans
for i in range(R):
for j in range(C):
cur1 = [row[:] for row in cur] #列表的复制一定要深copy
for i_, j_ in [[i, j], [i - 1, j], [i + 1, j], [i, j + 1], [i, j - 1]]:
if 0 <= i_ < R and 0 <= j_ < C:
cur1[i_][j_] ^= 1
cur_ = helper(cur1)
if cur_ not in visited:
visited.add(cur_)
queue.append(cur1)
ans += 1
return -1
方法二:暴力枚举
class Solution:
def minFlips(self, mat) -> int:
R,C = len(mat),len(mat[0])
N = R*C
ans = R*C + 1
for i in itertools.product(range(2),repeat = N):
bns = sum(i)
if bns >= ans:
continue
r = c = 0
B = [row[:] for row in mat]
for adj in i:
if adj:
for i_,j_ in [[r,c],[r+1,c],[r-1,c],[r,c+1],[r,c-1]]:
if 0 <= i_ < R and 0 <= j_ < C:
B[i_][j_] ^= 1
c += 1
if c == C:
c = 0
r += 1
if sum(sum(row)for row in B) == 0:
ans = bns
return ans if ans < N+1 else -1
leetcode-166周赛-5282-转化为全0矩阵的最小反转次数的更多相关文章
- LeetCode 5282. 转化为全零矩阵的最少反转次数
地址 https://leetcode-cn.com/submissions/detail/39277402/ 题目描述给你一个 m x n 的二进制矩阵 mat. 每一步,你可以选择一个单元格并将它 ...
- 单调栈求全1(或全0)子矩阵的个数 洛谷P5300与或和 P3400仓鼠窝
爆零好爽,被中学生虐好爽,还好我毕业得早 求全1(或全0)子矩阵的个数,看了题解有好几种思路,我学了三种,但有两种不是很理解,而且也没另外那个跑得快,所以简单讲述一一下我会的那种来自Caro23333 ...
- 【JavaScript】创建全0的Array
1.创建一个长度为m的全0数组 var arr = new Array(m).fill(0); 2.创建一个m行n列的全0数组 var arr = new Array(m).fill(new Arra ...
- leetcode 双周赛9 进击的骑士
一个坐标可以从 -infinity 延伸到 +infinity 的 无限大的 棋盘上,你的 骑士 驻扎在坐标为 [0, 0] 的方格里. 骑士的走法和中国象棋中的马相似,走 “日” 字:即先向左(或右 ...
- LeetCode#453 最小移动次数使数组元素相等
给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数.每次移动可以使 n - 1 个元素增加 1. 示例: 输入: [,,] 输出: 解释: 只需要3次移动(注意每次移动会增加两个 ...
- Leetcode之二分法专题-240. 搜索二维矩阵 II(Search a 2D Matrix II)
Leetcode之二分法专题-240. 搜索二维矩阵 II(Search a 2D Matrix II) 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵 ...
- LeetCode 453. 最小移动次数使数组元素相等(Minimum Moves to Equal Array Elements) 47
453. 最小移动次数使数组元素相等 453. Minimum Moves to Equal Array Elements 题目描述 给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移 ...
- Leetcode之动态规划(DP)专题-931. 下降路径最小和(Minimum Falling Path Sum)
Leetcode之动态规划(DP)专题-931. 下降路径最小和(Minimum Falling Path Sum) 给定一个方形整数数组 A,我们想要得到通过 A 的下降路径的最小和. 下降路径可以 ...
- 【python】Leetcode每日一题-寻找旋转排序数组中的最小元素
[python]Leetcode每日一题-寻找旋转排序数组中的最小元素 [题目描述] 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组.例如,原数组nums ...
随机推荐
- http://research.google.com/archive/mapreduce.html
http://research.google.com/archive/mapreduce.html
- java 创建文件 呵呵 成功
package aaa;import java.util.Date;import java.util.regex.Matcher;import java.util.regex.Pattern;impo ...
- python web自动化测试框架搭建(功能&接口)——测试用例执行和结果收集
由于unittest框架中结果收集在不同文件中,所以此处重写结果收集方法,加入执行时间,失败信息,失败截图等 TestRunner.py # coding=utf-8 import sys impor ...
- python web自动化测试框架搭建(功能&接口)——通用模块
1.通用模块: config.conf: 公共配置文件,配置报告.日志.截图路径,以及邮件相关配置 [report] reportpath = E:\workspace\WebAutomation\s ...
- Looper,Handler, MessageQueue
Looper Looper是线程用来运行消息循环(message loop)的类.默认情况下,线程并没有与之关联的Looper,可以通过在线程中调用Looper.prepare() 方法来获取,并通过 ...
- UML 类图快速入门
UML 图形 官方定义 UML 类图(Class Diagram) UML 时序图(Sequence Diagram) 领域 UML 类图和实现 UML 类图 领域 UML 类图 实现 UML 类图 ...
- P3826 [NOI2017]蔬菜
传送门 注意每一单位蔬菜的变质时间是固定的,不随销售发生变化 固定的...... 就是每一个单位的蔬菜在哪一天变质是早就定好了的 发现从第一天推到最后一天很不好搞 考虑反过来,从最后一天推到第一天,这 ...
- Java 小技巧和在Java避免NullPonintException的最佳方法(翻译)
前几天就g+里面看到有人引用这篇博文.看了一下.受益颇多. 所以翻译过来,希望和大家一起学习.本人英语水平有限,假设有错,请大家指正. 原文地址(须要翻墙):http://ja ...
- jquery动态加载select选项
$("#selectid").get(0).options.add(new Option(json数据))
- JVM(12)之 可视化分析工具
开发十年,就只剩下这套架构体系了! >>> 经过前几篇博文对堆内存以及垃圾收集机制的学习,相信小伙伴们已经建立了一套比较完整的理论体系!本篇博客就根据已有的理论知识,通过可视化工 ...