Leetcode打卡:最少翻转次数使二进制矩阵回文II

执行结果:通过

题目:3240 最少翻转次数使二进制矩阵回文II

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

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

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

请你返回 最少 翻转次数,使得矩阵中 所有 行和列都是 回文的 ,且矩阵中 1 的数目可以被 4 整除 。

示例 1:

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

输出:3

解释:

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

输出:2

解释:

示例 3:

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

输出:2

解释:

提示:

  • m == grid.length
  • n == grid[i].length
  • 1 <= m * n <= 2 * 105
  • 0 <= grid[i][j] <= 1

代码以及解题思路

代码:

int minFlips(int** grid, int gridSize, int* gridColSize) {int flips = 0;int m = gridSize, n = gridColSize[0];int midRow = m / 2, midCol = n / 2;for (int i = 0; i < midRow; i++) {for (int j = 0; j < midCol; j++) {int sum = grid[i][j] + grid[i][n - 1 - j] + grid[m - 1 - i][j] + grid[m - 1 - i][n - 1 - j];flips += fmin(sum, 4 - sum);}}if (m % 2 != 0 && n % 2 != 0) {flips += grid[midRow][midCol];}int midFlips = 0, ones = 0;if (m % 2 != 0) {for (int j1 = 0, j2 = n - 1; j1 < j2; j1++, j2--) {if (grid[midRow][j1] != grid[midRow][j2]) {midFlips++;} else {ones += grid[midRow][j1] * 2;}}}if (n % 2 != 0) {for (int i1 = 0, i2 = m - 1; i1 < i2; i1++, i2--) {if (grid[i1][midCol] != grid[i2][midCol]) {midFlips++;} else {ones += grid[i1][midCol] * 2;}}}if (midFlips == 0 && ones % 4 != 0) {midFlips += 2;}flips += midFlips;return flips;
}

解题思路:

  1. 初始化变量
    • flips 用于记录总的翻转次数。
    • m 和 n 分别表示网格的行数和列数。
    • midRow 和 midCol 分别表示网格中间行的索引和中间列的索引(如果网格的行数或列数是奇数,则midRowmidCol指向中间那一行或列)。
  2. 处理四个象限
    • 遍历网格的左上象限(不包括中间行和中间列),对于每个元素,计算它及其三个对称位置(右下、左下、右上)的元素之和sum
    • 如果sum为0或4,说明这四个元素已经相同,无需翻转。
    • 如果sum为1或3,说明这四个元素中有三个相同,一个不同,可以通过翻转不同的那个元素使其与其余三个相同,此时翻转次数加1。
    • 如果sum为2,说明这四个元素中有两个0和两个1,选择翻转其中两个元素使其全部变为0或全部变为1,此时翻转次数加2(但代码中通过fmin(sum, 4 - sum)优化为加1,因为无论翻转哪两个元素,最终效果相同,只需一次“操作”的考虑,这里“操作”可以是翻转两个或翻转零个,但结果都是使四个元素相同)。
  3. 处理中心元素
    • 如果网格的行数和列数都是奇数,那么中心元素无法通过对称位置来翻转,所以直接将其翻转(如果它是0则翻转为1,如果它是1则翻转为0),翻转次数加1。
  4. 处理中间行和中间列
    • 如果网格的行数是奇数,遍历中间行的元素,检查每一对对称的元素(例如最左边的和最右边的),如果它们不同,则需要进行一次翻转来使它们相同,记录翻转次数midFlips,如果相同,则记录这对元素为1的数量ones(乘以2是因为每次翻转都涉及两个元素)。
    • 如果网格的列数是奇数,处理同上,但遍历的是中间列的元素。
    • 最后,如果中间行和中间列都没有需要翻转的对(midFlips为0),但是ones的数量不是4的倍数(意味着无法通过一次翻转使所有元素相同),则需要额外的两次翻转(因为需要改变两个元素的状态来匹配其他元素),此时midFlips加2。
  5. 返回结果
    • 将所有计算得到的翻转次数相加,得到最终结果flips,并返回。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

VTK知识学习(9)-空间变换

1、前言 在三维空间里定义的三维模型&#xff0c;最后显示时都是投影到二维平面&#xff0c;比如在屏幕上显示。 三维到二维的投影包括透视投影&#xff08;Perspective Projection&#xff09;和正交投影&#xff08;Orthogonale Projection&#xff09;。正交投影也叫平行投…

英伟达 Isaac Sim仿真平台安装体验

硬件配置、系统 RTX 3080RAM: 32Gi7-12700Fubuntu20.04 使用Omniverse launcher安装加载isaac sim 这种方法我并没有成功&#xff0c;因为启动的时候报错Failed to create any GPU devices, including an attempt with compatibility mode. 。后面我选择使用 isaac sim dock…

笔记02----重新思考轻量化视觉Transformer中的局部感知CloFormer(即插即用)

1. 基本信息 论文标题: 《Rethinking Local Perception in Lightweight Vision Transformer》中文标题: 《重新思考轻量化视觉Transformer中的局部感知》作者单位: 清华大学发表时间: 2023论文地址: https://arxiv.org/abs/2303.17803代码地址: https://github.com/qhfan/CloF…

LVGL-从入门到熟练使用

LVGL简介 LVGL&#xff08; Light and Versatile Graphics Library &#xff09;是一个轻量、多功能的开源图形库。 1、丰富且强大的模块化图形组件&#xff1a;按钮 、图表 、列表、滑动条、图片等 2、高级的图形引擎&#xff1a;动画、抗锯齿、透明度、平滑滚动、图层混合等…

【python系列】python数据类型的分类和比较

一、数据类型的定义 在程序设计的类型系统中&#xff0c;数据类型&#xff08;英语&#xff1a;Data type&#xff09;&#xff0c;又称资料型态、资料型别&#xff0c;是用来约束数据的解释。——Wikipedia 从定义我们可以看出来&#xff0c;数字类型的理解最主要的是约束数据…

SpringBoot(二十七)SpringBoot集成XRebel实现异常定位

之前我使用JRebel实现了IDEA热更新。 这几天我无聊的时候&#xff0c;研究了一下JRebel发现&#xff0c;好像不止JRebel一个插件&#xff0c;同时安装的还有一个XRebel插件&#xff0c;百度了一下&#xff0c;XRebel可以实现异常定位&#xff0c;还有方法的执行分析&#xff0c…

windows上部署flask程序

文章目录 前言一、准备工作二、配置 Gunicorn 或 uWSGI1.安装 Waitress2.修改启动文件来使用 Waitress 启动 Flask 应用3.配置反向代理&#xff08;可选&#xff09;4.启动程序访问 三.Flask 程序在 Windows 启动时自动启动1.使用 nssm&#xff08;Non-Sucking Service Manager…

python调用MySql保姆级教程(包会的)

目录 一、下载MySql 二、安装MySql 三、验证MySql是否OK 1、MySQL控制台验证 2、命令提示符cmd窗口验证 四、Python调用MySql 4.1 安装pysql 4.2 使用pysql 4.2.1、连接数据库服务器并且创建数据库和表 4.2.2 、将人脸识别考勤系统识别到的数据自动填入到数据库的表单中…

如何解决将长视频转换为易于处理的 Spacetime Patch 的问题?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 将长视频转换为易于处理的 Spacetime Patch&#xff08;时空补丁&#xff09;是一项挑战&#xff0c;尤其是当视频内容复杂或包含长时间连续场景时。在计算机视觉和视频分析等领域&#xff0c;Spacetim…

大数据学习16之Spark-Core

1. 概述 1.1.简介 Apache Spark 是专门为大规模数据处理而设计的快速通用的计算引擎。 一种类似 Hadoop MapReduce 的通用并行计算框架&#xff0c;它拥有MapReduce的优点&#xff0c;不同于MR的是Job中间结果可以缓存在内存中&#xff0c;从而不需要读取HDFS&#xff0c;减少…

LeetCode 力扣 热题 100道(五)最长回文子串(C++)

最长回文子串 给你一个字符串 s&#xff0c;找到 s 中最长的 回文子串。 回文性 如果字符串向前和向后读都相同&#xff0c;则它满足 回文性 子字符串子字符串 是字符串中连续的 非空 字符序列。 动态规划法 class Solution { public:string longestPalindrome(string s) {i…

dropout层/暂退法

作用&#xff1a;正则化&#xff0c;缓解过拟合 实现方式&#xff1a; 在前向传播过程中&#xff0c;将该层的一部分神经元的输出特征随机丢掉&#xff08;设为 0&#xff09;&#xff0c;相当于随机消灭一部分神经元仅在训练期间使用&#xff0c;测试时没有神经元被丢掉。 正…

【圆上的连线——卡特兰数】

题目 思路 因为不相交&#xff0c;所以每个点最多连出一条线&#xff0c;所以参与连线的点一定是偶数个 我们按照选出点的数量 2&#xff0c;4 …… 2x 将答案划分&#xff0c;答案可以表示为 &#xff08;假设我们选出2x个点连线&#xff0c;假设方法数为 &#xff1a;2x个点参…

Pytest-Bdd-Playwright 系列教程(11):场景快捷方式

Pytest-Bdd-Playwright 系列教程&#xff08;11&#xff09;&#xff1a;场景快捷方式 前言1. 手动绑定场景的传统方法2. 场景快捷方式的自动绑定方法2.1 绑定所有场景2.2 绑定多个路径2.3 自动与手动绑定的结合 3. 示例&#xff1a;结合 Playwright 的实际应用3.1 项目目录结构…

day-17 反转字符串中的单词

利用split()函数和substring函数 code: class Solution {public String reverseWords(String s) {int m0;while(s.charAt(m) ){m;}ss.substring(m);String arr[]s.split("[\\s]");int narr.length;String ss"";for(int in-1;i>1;i--){ssssarr[i]"…

Ubuntu20.04从零安装IsaacSim/IsaacLab

Ubuntu20.04从零安装IsaacSim/IsaacLab 电脑硬件配置&#xff1a;安装Isaac sim方案一&#xff1a;pip安装方案二&#xff1a;预构建二进制文件安装1、安装ominiverse2、在ominiverse中安装isaac sim&#xff0c;下载最新的4.2版本 安装Isaac Lab1、IsaacLab环境克隆2、创建con…

力扣hot100-->二分查找

二分查找 1. 33. 搜索旋转排序数组 中等 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[…

Javaweb梳理17——HTMLCSS简介

Javaweb梳理17——HTML&CSS简介 17 HTML&CSS简介17.1 HTML介绍17.2 快速入门17.3 基础标签17.3 .1 标题标签17.3.2 hr标签17.3.3 字体标签17.3.4 换行17.3.8 案例17.3.9 图片、音频、视频标签17.3.10 超链接标签17.3.11 列表标签 17 HTML&CSS简介 今日目标&#x…

倍福PLC数据 转 IEC61850项目案例

目录 1 案例说明 2 VFBOX网关工作原理 3 准备工作 4 设置倍福PLC 5 配置网关参数采集倍福PLC数据 6 用IEC61850协议转发数据 7 网关使用多个逻辑设备和逻辑节点的方法 8 案例总结 1 案例说明 设置倍福PLC&#xff0c;开通ADS通信设置网关采集倍福PLC数据把采集的数据转…

代码辅助工具 GPT / Cursor

代码辅助工具 GPT / Cursor 文章说明GPT辅助效果第一次提问效果第二次提问效果第三第四次提问效果手动微调布局和宽高的效果第五次要求添加主题切换效果第六次提问--继续让它优化主题切换的效果第七次提问--修改主题切换的按钮位置并添加动画提问词第一次提问词第二次提问词第三…