LeetCode 1536. 排布二进制网格的最少交换次数
文章目录
- 1. 题目
- 2. 解题
1. 题目
给你一个 n x n 的二进制网格 grid,每一次操作中,你可以选择网格的 相邻两行 进行交换。
一个符合要求的网格需要满足主对角线以上的格子全部都是 0 。
请你返回使网格满足要求的最少操作次数,如果无法使网格符合要求,请你返回 -1 。
主对角线指的是从 (1, 1) 到 (n, n) 的这些格子。
输入:grid = [[0,0,1],[1,1,0],[1,0,0]]
输出:3
输入:grid = [[0,1,1,0],[0,1,1,0],[0,1,1,0],[0,1,1,0]]
输出:-1
解释:所有行都是一样的,交换相邻行无法使网格符合要求。
输入:grid = [[1,0,0],[1,1,0],[1,1,1]]
输出:0提示:
n == grid.length
n == grid[i].length
1 <= n <= 200
grid[i][j] 要么是 0 要么是 1 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-swaps-to-arrange-a-binary-grid
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 找出每行末尾连续的0的个数
- 检查每行0的个数是否满足。不满足,往下找到第一个满足的,挪上去
class Solution {public:int minSwaps(vector<vector<int>>& grid) {int i, j, sum = 0, n = grid.size(), ans = 0;vector<int> num;for(i = 0; i < n; ++i){sum = 0;for(j = n-1; j>=0 && grid[i][j]==0 ; --j)sum++;num.push_back(sum);//末尾连续0的个数}for(i = 0; i < n; ++i){if(num[i] >= n-i-1)continue;//0的个数够了,不动j = i;while(j < n && num[j] < n-i-1){ //往下找到一个0够多的j++;}if(j == n)//没找到,返回-1return -1;while(num[i] < n-i-1){ //找到了,往上挪swap(num[j], num[j-1]);ans++;j--;}}return ans;}
};
168 ms 25.9 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 1536. 排布二进制网格的最少交换次数相关推荐
- 最少交换次数python_leetcode第200周赛第三题leetcode1536. 排布二进制网格的最少交换次数...
leetcode1536. 排布二进制网格的最少交换次数 给你一个 n x n 的二进制网格 grid,每一次操作中,你可以选择网格的 相邻两行 进行交换. 一个符合要求的网格需要满足主对角线以上的格 ...
- leetcode1536. 排布二进制网格的最少交换次数(贪心算法)
给你一个 n x n 的二进制网格 grid,每一次操作中,你可以选择网格的 相邻两行 进行交换. 一个符合要求的网格需要满足主对角线以上的格子全部都是 0 . 请你返回使网格满足要求的最少操作次数, ...
- C++描述 LeetCode 5676. 生成交替二进制字符串的最少操作数
C++描述 LeetCode 5676. 生成交替二进制字符串的最少操作数 大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在C ...
- LeetCode 2134. 最少交换次数来组合所有的 1 II(数组*2 + 滑动窗口)
文章目录 1. 题目 2. 解题 1. 题目 交换 定义为选中一个数组中的两个 互不相同 的位置并交换二者的值. 环形 数组是一个数组,可以认为 第一个 元素和 最后一个 元素 相邻 . 给你一个 二 ...
- python 数组排序最少交换次数_数组排序 使得交换次数最少
题目: 给定一个包含1-n的数列,我们通过交换任意两个元素给数列重新排序. 求最少需要多少次交换,能把数组排成按1-n递增的顺序,(数组中的元素互不重复). 比如 初始状态 5 4 3 2 1 .交换 ...
- LeetCode 1151. 最少交换次数来组合所有的 1(滑动窗口)
文章目录 1. 题目 2. 解题 1. 题目 给出一个二进制数组 data,你需要通过交换位置,将数组中 任何位置 上的 1 组合到一起,并返回所有可能中所需 最少的交换次数. 示例 1: 输入:[1 ...
- LeetCode 1284. 转化为全零矩阵的最少反转次数(BFS 矩阵状态编码解码)
1. 题目 给你一个 m x n 的二进制矩阵 mat. 每一步,你可以选择一个单元格并将它反转(反转表示 0 变 1 ,1 变 0 ).如果存在和它相邻的单元格,那么这些相邻的单元格也会被反转.(注 ...
- LeetCode 871. Minimum Number of Refueling Stops 最少加油次数
LeetCode 871. Minimum Number of Refueling Stops 本题是LeetCode 871题,最少加油次数. 题目描述 A car travels from a s ...
- LeetCode 1864. 构成交替字符串需要的最小交换次数
文章目录 1. 题目 2. 解题 1. 题目 给你一个二进制字符串 s ,现需要将其转化为一个 交替字符串 . 请你计算并返回转化所需的 最小 字符交换次数,如果无法完成转化,返回 -1 . 交替字符 ...
最新文章
- 2021重庆江北中学高考成绩查询,重庆江北中学校2021年排名
- python gevent模块 下载_Python协程阻塞IO非阻塞IO同步IO异步IO
- vscode使用教程python-VS Code 配置 Python 开发环境
- 采用傅立叶变换空间载波法从强度分布得到相位分布,即从空间上呈正弦分布的光强信息,恢复出波面的相位信息
- c语言枚举变量自增报错,C_数据结构与算法(1):C语言基础
- Vue源码解析之AST语法树(三)
- Webpack 10分钟入门
- 基于Amarok的跨平台音乐播放器:Clementine mac版
- 修复Windows10系统的注册表?
- 随机森林原始论文_推荐一个神器画出论文中酷炫的机器学习图
- 全自动采集程序 php,快看CMS全自动采集影视程序
- 初级程序员和二级Java哪个难,软考初级程序员和计算机二级哪个更受欢迎
- 华为网络技术大赛笔记——数据库基础原理
- Vue 自定义指令里面获取Vue实例 实现v-copy与i18n结合。
- 1.49万件区块链专利全景:BATJP占26%,游戏类迎突破
- 日行一善的100种方式
- 用计算机处理表格信息,用计算机处理数据
- py-01-LINUX
- MAC删除开机自启动程序
- Anaconda中pkgs文件夹详解
热门文章
- JavaWeb笔记04-解决GET与POST乱码问题
- 普通人学python有意义吗_学python难吗
- Spatial Transformer Networks(STN)
- QT:QObject 简单介绍
- MFC CPropertySheet 多页面切换 实例
- C# Socket 编程详解
- 手机触摸屏的分类和原理,供大家选择手机时用
- 嵌入式数据库sqlite在ARM上的的移植和使用
- kali linux 2.0 ssh,Kali 2.0使用SSH进行远程登录(示例代码)
- 175. Combine Two Tables