文章目录

  • 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. 排布二进制网格的最少交换次数相关推荐

  1. 最少交换次数python_leetcode第200周赛第三题leetcode1536. 排布二进制网格的最少交换次数...

    leetcode1536. 排布二进制网格的最少交换次数 给你一个 n x n 的二进制网格 grid,每一次操作中,你可以选择网格的 相邻两行 进行交换. 一个符合要求的网格需要满足主对角线以上的格 ...

  2. leetcode1536. 排布二进制网格的最少交换次数(贪心算法)

    给你一个 n x n 的二进制网格 grid,每一次操作中,你可以选择网格的 相邻两行 进行交换. 一个符合要求的网格需要满足主对角线以上的格子全部都是 0 . 请你返回使网格满足要求的最少操作次数, ...

  3. C++描述 LeetCode 5676. 生成交替二进制字符串的最少操作数

    C++描述 LeetCode 5676. 生成交替二进制字符串的最少操作数   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在C ...

  4. LeetCode 2134. 最少交换次数来组合所有的 1 II(数组*2 + 滑动窗口)

    文章目录 1. 题目 2. 解题 1. 题目 交换 定义为选中一个数组中的两个 互不相同 的位置并交换二者的值. 环形 数组是一个数组,可以认为 第一个 元素和 最后一个 元素 相邻 . 给你一个 二 ...

  5. python 数组排序最少交换次数_数组排序 使得交换次数最少

    题目: 给定一个包含1-n的数列,我们通过交换任意两个元素给数列重新排序. 求最少需要多少次交换,能把数组排成按1-n递增的顺序,(数组中的元素互不重复). 比如 初始状态 5 4 3 2 1 .交换 ...

  6. LeetCode 1151. 最少交换次数来组合所有的 1(滑动窗口)

    文章目录 1. 题目 2. 解题 1. 题目 给出一个二进制数组 data,你需要通过交换位置,将数组中 任何位置 上的 1 组合到一起,并返回所有可能中所需 最少的交换次数. 示例 1: 输入:[1 ...

  7. LeetCode 1284. 转化为全零矩阵的最少反转次数(BFS 矩阵状态编码解码)

    1. 题目 给你一个 m x n 的二进制矩阵 mat. 每一步,你可以选择一个单元格并将它反转(反转表示 0 变 1 ,1 变 0 ).如果存在和它相邻的单元格,那么这些相邻的单元格也会被反转.(注 ...

  8. LeetCode 871. Minimum Number of Refueling Stops 最少加油次数

    LeetCode 871. Minimum Number of Refueling Stops 本题是LeetCode 871题,最少加油次数. 题目描述 A car travels from a s ...

  9. LeetCode 1864. 构成交替字符串需要的最小交换次数

    文章目录 1. 题目 2. 解题 1. 题目 给你一个二进制字符串 s ,现需要将其转化为一个 交替字符串 . 请你计算并返回转化所需的 最小 字符交换次数,如果无法完成转化,返回 -1 . 交替字符 ...

最新文章

  1. 2021重庆江北中学高考成绩查询,重庆江北中学校2021年排名
  2. python gevent模块 下载_Python协程阻塞IO非阻塞IO同步IO异步IO
  3. vscode使用教程python-VS Code 配置 Python 开发环境
  4. 采用傅立叶变换空间载波法从强度分布得到相位分布,即从空间上呈正弦分布的光强信息,恢复出波面的相位信息
  5. c语言枚举变量自增报错,C_数据结构与算法(1):C语言基础
  6. Vue源码解析之AST语法树(三)
  7. Webpack 10分钟入门
  8. 基于Amarok的跨平台音乐播放器:Clementine mac版
  9. 修复Windows10系统的注册表?
  10. 随机森林原始论文_推荐一个神器画出论文中酷炫的机器学习图
  11. 全自动采集程序 php,快看CMS全自动采集影视程序
  12. 初级程序员和二级Java哪个难,软考初级程序员和计算机二级哪个更受欢迎
  13. 华为网络技术大赛笔记——数据库基础原理
  14. Vue 自定义指令里面获取Vue实例 实现v-copy与i18n结合。
  15. 1.49万件区块链专利全景:BATJP占26%,游戏类迎突破
  16. 日行一善的100种方式
  17. 用计算机处理表格信息,用计算机处理数据
  18. py-01-LINUX
  19. MAC删除开机自启动程序
  20. Anaconda中pkgs文件夹详解

热门文章

  1. JavaWeb笔记04-解决GET与POST乱码问题
  2. 普通人学python有意义吗_学python难吗
  3. Spatial Transformer Networks(STN)
  4. QT:QObject 简单介绍
  5. MFC CPropertySheet 多页面切换 实例
  6. C# Socket 编程详解
  7. 手机触摸屏的分类和原理,供大家选择手机时用
  8. 嵌入式数据库sqlite在ARM上的的移植和使用
  9. kali linux 2.0 ssh,Kali 2.0使用SSH进行远程登录(示例代码)
  10. 175. Combine Two Tables