给你一个 n x n 的二进制网格 grid,每一次操作中,你可以选择网格的 相邻两行 进行交换。

一个符合要求的网格需要满足主对角线以上的格子全部都是 0 。

请你返回使网格满足要求的最少操作次数,如果无法使网格符合要求,请你返回 -1 。

主对角线指的是从 (1, 1) 到 (n, n) 的这些格子。

代码

class Solution {public int minSwaps(int[][] grid) {int n=grid.length,m=grid[0].length;LinkedList<Integer> list=new LinkedList<>();for(int i=0;i<n;i++)//计算右边的连续0{int row=0;for(int j=m-1;j>=0;j--){if(grid[i][j]==1) break;row++;}list.add(row);}int ans=0;for(int i=0;i<n-1;i++)//最后一行任何情况都满足,不需要计算{int ser=n-i-1;int j=0;for(;j<n;j++){if(list.get(j)>=ser){ans+=j-i;list.remove(j);//模拟交换list.addFirst(0);break;}}if(j==n) return -1;//找不到符合的}return ans;}
}

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

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

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

  2. LeetCode 1536. 排布二进制网格的最少交换次数

    文章目录 1. 题目 2. 解题 1. 题目 给你一个 n x n 的二进制网格 grid,每一次操作中,你可以选择网格的 相邻两行 进行交换. 一个符合要求的网格需要满足主对角线以上的格子全部都是 ...

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

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

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

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

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

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

  6. 通过交换相邻数来完成排序所需要的最少交换次数

    对一个无序序列进行排序,要求一次只能交换相邻的两个数,那么最少需要交换多少次才可以完成排序呢? 本问题假设序列所有数各不相同. 概念介绍: 1.逆序.一般认为从左向右序列的数字增大认为是正序的,那么从 ...

  7. 最少交换次数python_史上最简单!冒泡、选择排序的Python实现及算法优化详解

    1.排序概念 内部排序和外部排序 根据排序过程中,待排序的数据是否全部被放在内存中,分为两大类: 内部排序:指的是待排序的数据存放在计算机内存中进行的排序过程: 外部排序:指的是排序中要对外存储器进行 ...

  8. *【HDU - 2819】Swap(二分图匹配,输出路径)(待证明:是否是最少交换次数?)

    题干: Given an N*N matrix with each entry equal to 0 or 1. You can swap any two rows or any two column ...

  9. 遗传算法求解3D打印中零件二维排布问题(MATLAB实现)

    目录 遗传算法求解3D打印中零件二维排布问题(MATLAB实现) 一.遗传算法简介 二.排样方法 1.二维不规则排样 2.编码及解码方式 三.遗传算法求解 1.算法建模 2.遗传算子 选择算子 交叉算 ...

最新文章

  1. 软件测试工程师的角度看论证学问
  2. 扎克伯格凌晨放大招,说几句话能造世界的那种
  3. 世界最成功的僵尸网络使用Fast Flux技术躲避检测
  4. scikit_image
  5. linux查看内存cpu占用
  6. java servlet 返回图片_SpringMVC返回图片的几种方式
  7. NE5532前级音调板 带高中低音调节和音量调节
  8. 程序员面试金典 - 面试题 02.01. 移除重复节点(哈希set)
  9. SQLLoader1(简单测试,以控制文件方式导入数据)
  10. Oracle 10g新特性
  11. TDirectory.GetDirectoryRoot获取指定目录的根目录
  12. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_06-freemarker基础-遍历map数据...
  13. ASP.NET WEB API简介
  14. 天津博物馆镇馆之宝——西周太保鼎
  15. iOS开发基础之第三方调起自己的App
  16. vue动态加载SVG文件并修改节点数据
  17. 小米与360的智能硬件用户之争
  18. ABAQUS 2020 license冲突解决
  19. Github每日精选(第56期):支持多语言的文字识别EasyOCR
  20. Lua基础:table的几种构造方式

热门文章

  1. 1090. Highest Price in Supply Chain (25)
  2. TCP send 阻塞与非阻塞
  3. EXEC函数族的一般规律
  4. 大厂首发:338页网易Java面试真题解析火爆全网
  5. 牛客网笔记之JAVA运算符
  6. MySQL字段拼接Concat
  7. shutil模块、json和pickle模块
  8. df -l查看本地文件系统
  9. 如何恢复误删的OneNote页面
  10. 【JAVA并发编程实战】3、同步容器