前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 1536. 排布二进制网格的最少交换次数

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

作者头像
Michael阿明
发布2021-02-19 10:45:33
2770
发布2021-02-19 10:45:33
举报
文章被收录于专栏:Michael阿明学习之路

文章目录

1. 题目

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

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

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

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

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
输入:grid = [[0,0,1],[1,1,0],[1,0,0]]
输出:3
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
输入:grid = [[0,1,1,0],[0,1,1,0],[0,1,1,0],[0,1,1,0]]
输出:-1
解释:所有行都是一样的,交换相邻行无法使网格符合要求。
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
输入: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的个数是否满足。不满足,往下找到第一个满足的,挪上去
代码语言:javascript
复制
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)//没找到,返回-1
                return -1;
            while(num[i] < n-i-1)
            {   //找到了,往上挪
                swap(num[j], num[j-1]);
                ans++;
                j--;
            }
        }
        return ans;
    }
};

168 ms 25.9 MB

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档