上海自适应网站,网站开发济南招聘,类似于百度快照的网站,seo网站优化多少钱【LetMeFly】1536.排布二进制网格的最少交换次数#xff1a;后缀0#xff08;贪心#xff09; 力扣题目链接#xff1a;https://leetcode.cn/problems/minimum-swaps-to-arrange-a-binary-grid/ 给你一个 n x n 的二进制网格 grid#xff0c;每一次操作中#xff0c;你…【LetMeFly】1536.排布二进制网格的最少交换次数后缀0贪心力扣题目链接https://leetcode.cn/problems/minimum-swaps-to-arrange-a-binary-grid/给你一个n x n的二进制网格grid每一次操作中你可以选择网格的相邻两行进行交换。一个符合要求的网格需要满足主对角线以上的格子全部都是0。请你返回使网格满足要求的最少操作次数如果无法使网格符合要求请你返回-1。主对角线指的是从(1, 1)到(n, n)的这些格子。示例 1输入grid [[0,0,1],[1,1,0],[1,0,0]]输出3示例 2输入grid [[0,1,1,0],[0,1,1,0],[0,1,1,0],[0,1,1,0]]输出-1解释所有行都是一样的交换相邻行无法使网格符合要求。示例 3输入grid [[1,0,0],[1,1,0],[1,1,1]]输出0提示n grid.lengthn grid[i].length1 n 200grid[i][j]要么是0要么是1。解题方法贪心其实我们只需要关注每一行最后有多少个连续的0 00。我们可以使用一个数组遍历一次grid把后缀0 00的信息存入suffix数组中。然后g r i d gridgrid就可以扔掉了。从第一行开始遍历到最后一行遍历到第i ii行时这一行至少有n − i − 1 n-i-1n−i−1个后缀0就用j jj从第i ii行往下遍历找到第一个满足条件的行一行一行的置换上来。问第i ii行太多后缀0会不会浪费答不会。因为后面行的需求只会越来越小。相当于每一行都要尽可能少的次数来满足达成后缀条件。时间复杂度O ( n 2 ) O(n^2)O(n2)空间复杂度O ( n ) O(n)O(n)AC代码C/* * LastEditTime: 2026-03-02 09:32:18 */classSolution{private:inlineintcountSuffix(vectorintrow){intans0;for(intirow.size()-1;i0;i--,ans){if(row[i]!0){break;}}returnans;}intchange(vectorintsuffix,intu,intd){for(intid-1;iu;i--){swap(suffix[i],suffix[i1]);}returnd-u;}public:intminSwaps(vectorvectorintgrid){intngrid.size();vectorintsuffix(n);for(inti0;in;i){suffix[i]countSuffix(grid[i]);}intans0;for(inti0;in;i){for(intji;jn;j){if(suffix[j]n-i-1){anschange(suffix,i,j);gotoloop;}}return-1;loop:;}returnans;}};同步发文于CSDN和我的个人博客原创不易转载经作者同意后请附上原文链接哦~千篇源码题解已开源