【每日题解】3239. 最少翻转次数使二进制矩阵回文 I

devtools/2024/11/16 17:59:41/

给你一个 m x n 的二进制矩阵 grid 。

如果矩阵中一行或者一列从前往后与从后往前读是一样的,那么我们称这一行或者这一列是 回文 的。

你可以将 grid 中任意格子的值 翻转 ,也就是将格子里的值从 0 变成 1 ,或者从 1 变成 0 。

请你返回 最少 翻转次数,使得矩阵 要么 所有行是 回文的 ,要么所有列是 回文的 。

示例 1:

输入:grid = [[1,0,0],[0,0,0],[0,0,1]]

输出:2

解释:

将高亮的格子翻转,得到所有行都是回文的。

示例 2:

输入:grid = [[0,1],[0,1],[0,0]]

输出:1

解释:

将高亮的格子翻转,得到所有列都是回文的。

示例 3:

输入:grid = [[1],[0]]

输出:0

解释:

所有行已经是回文的。

思路

只需要计算反转次数,不需要计算具体反转哪些单元格。同时字符只有 0 和 1。因此为了让行或列变成回文,我们只需要让每行、每列是回文即可,从前后两个方向使用双指针同时向中间便利,如果两个指针指向的字符不同,需要反转的次数 +1。先遍历行,再遍历列,最终返回消耗较少的结果即可。

代码(C++)

class Solution {
public:int minFlips(vector<vector<int>>& grid) {int n = grid.size();int m = grid[0].size();int rowcnt = 0, colcnt = 0;for (int i = 0; i < n; ++i) {for (int j1 = 0, j2 = m - 1; j1 < j2; j1++, j2--) {if (grid[i][j1] != grid[i][j2]) {rowcnt++;}}}for (int j = 0; j < m; ++j) {for (int i1 = 0, i2 = n - 1; i1 < i2; i1++, i2--) {if (grid[i1][j] != grid[i2][j]) {colcnt++;}}}return min(rowcnt, colcnt);}
};

代码(Python)

class Solution:def minFlips(self, grid: List[List[int]]) -> int:row_cnt, col_cnt = 0, 0;m, n = len(grid), len(grid[0])for i in range(m):for j1 in range(n // 2):j2 = n - 1 - j1if grid[i][j1] != grid[i][j2]:row_cnt += 1for j in range(n):for i1 in range(m // 2):i2 = m - 1 - i1if grid[i1][j] != grid[i2][j]:col_cnt += 1return min(row_cnt, col_cnt)
  • 时间复杂度:O(mn),其中 m 和 n 分别矩阵 grid 的行数和列数,遍历矩阵两次来得到最小值。
  • 空间复杂度:O(1)。

http://www.ppmy.cn/devtools/134491.html

相关文章

Pytorch如何将嵌套的dict类型数据加载到GPU

在PyTorch中&#xff0c;您可以使用.to(device)方法将嵌套的字典中的所有支持的Tensor对象转移到GPU。以下是一个简单的例子 import torch# 假设您已经有了一个名为device的GPU设备对象 device torch.device("cuda:0" if torch.cuda.is_available() else "cp…

HTTP vs. HTTPS:从基础到安全的全面对比

文章目录 前言一、HTTP&#xff08;超文本传输协议&#xff09;&#xff1f;二、HTTPS&#xff08;超文本传输安全协议&#xff09;HTTP与HTTPS的核心区别使用场景对比为什么大多数网站现在都转向HTTPS&#xff1f; 总结 前言 在互联网世界中&#xff0c;HTTP和HTTPS协议是我们…

Ubuntu24.04 network:0 unclaimed wireless adapter no found

前言&#xff1a; 所遇问题原因在于&#xff0c;折腾显卡cuda版本&#xff0c;导致nvidia驱动没了&#xff0c;使用sudo ubuntu-drivers autoinstall后&#xff0c;驱动有了&#xff0c;但是reboot后无线网卡无法识别&#xff0c;此外usb无线网络也无法使用&#xff0c;ifconfi…

【操作系统】每日 3 题(二十四)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12820365.html &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享操作系统面试中常见的面试题给大家~ ❤️…

stm32F4 低功耗模式实例解析

文章目录 一、STM32F4低功耗模式概述睡眠模式&#xff1a;停止模式&#xff1a;待机模式&#xff1a; 二、低功耗模式实例代码三、示例代码说明四、低功耗模式的应用与优化 stm32F4 低功耗模式实例 一、STM32F4低功耗模式概述 STM32F4系列微控制器提供了多种低功耗模式&#x…

MFC程序崩溃时生成dmp文件

#include “HiExceptionHandle.h” #include <string> #pragma once class HiExceptionHandle { public:HiExceptionHandle(void);~HiExceptionHandle(void); public:void RunCrashHandler();void SetWERDumpLocation(const std::wstring dumpFolderPath); protected:st…

一文说清libc、glibc、glib的发展和关系

一 引言 在大家的技术生涯中&#xff0c;一定会遇到glib、glibc、libc这些个名词。 尤其像我这种对英文名脸盲的人&#xff0c;看着它们就头大&#xff0c;因为单从名字上看&#xff0c;也太像了&#xff0c;所以经常容易混淆。 即使翻翻网上的资料&#xff0c;看完还是有点懵…

企业生产环境-麒麟V10(ARM架构)操作系统部署kafka高可用集群

前言&#xff1a;Apache Kafka是一个分布式流处理平台&#xff0c;由LinkedIn开发并捐赠给Apache软件基金会。它主要用于构建实时数据流管道和流应用。Kafka具有高吞吐量、可扩展性和容错性的特点&#xff0c;适用于处理大量数据。 以下是Kafka的一些核心概念和特性&#xff1…