news 2026/9/7 23:37:11

LeetCode 1536.排布二进制网格的最少交换次数:后缀0(贪心)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 1536.排布二进制网格的最少交换次数:后缀0(贪心)

【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.length
  • n == grid[i].length
  • 1 <= n <= 200
  • grid[i][j]要么是0要么是1

解题方法:贪心

其实我们只需要关注每一行最后有多少个连续的0 00

我们可以使用一个数组,遍历一次grid,把后缀0 00的信息存入suffix数组中。然后g r i d gridgrid就可以扔掉了。

从第一行开始遍历到最后一行,遍历到第i ii行时,这一行至少有n − i − 1 n-i-1ni1个后缀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(vector<int>&row){intans=0;for(inti=row.size()-1;i>=0;i--,ans++){if(row[i]!=0){break;}}returnans;}intchange(vector<int>&suffix,intu,intd){for(inti=d-1;i>=u;i--){swap(suffix[i],suffix[i+1]);}returnd-u;}public:intminSwaps(vector<vector<int>>&grid){intn=grid.size();vector<int>suffix(n);for(inti=0;i<n;i++){suffix[i]=countSuffix(grid[i]);}intans=0;for(inti=0;i<n;i++){for(intj=i;j<n;j++){if(suffix[j]>=n-i-1){ans+=change(suffix,i,j);gotoloop;}}return-1;loop:;}returnans;}};

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 21:02:25

柑橘病害检测数据集(YOLO格式)

摘要&#xff1a;本研究基于自建的5类柑橘病害数据集&#xff08;5,658张图像/7,062个标注框&#xff09;&#xff0c;采用YOLO11n模型开发了一套支持图片、视频及实时摄像头检测的柑橘病害智能诊断与防治系统。 数据集简介 本研究构建了一个涵盖5类柑橘病害的目标检测数据集…

作者头像 李华
网站建设 2026/8/31 23:53:36

ESLint 解析器深度解析

## 关于ESLint解析器&#xff0c;你可能需要知道这些 在JavaScript开发中&#xff0c;代码质量工具已经成为不可或缺的一部分。ESLint作为其中最主流的工具&#xff0c;其核心功能依赖于一个关键组件——解析器。这个组件的作用可能比大多数人想象的要复杂和重要得多。 解析器到…

作者头像 李华
网站建设 2026/9/7 11:02:57

OFA-COCO模型部署教程:Docker镜像构建与本地模型挂载最佳实践

OFA-COCO模型部署教程&#xff1a;Docker镜像构建与本地模型挂载最佳实践 本文面向需要快速部署OFA图像描述模型的开发者和研究者&#xff0c;提供从零开始的完整部署指南&#xff0c;重点解决模型文件本地挂载和Docker化部署的实际问题。 1. 项目概述 OFA&#xff08;One For…

作者头像 李华
网站建设 2026/9/2 3:30:55

AI读脸术银行场景应用:VIP客户识别系统部署指南

AI读脸术银行场景应用&#xff1a;VIP客户识别系统部署指南 1. 引言 想象一下这个场景&#xff1a;一位银行的高净值客户走进网点&#xff0c;还没等他走到柜台&#xff0c;大堂经理已经微笑着迎了上去&#xff0c;准确地称呼出“王先生&#xff0c;欢迎光临”。这不是科幻电…

作者头像 李华
网站建设 2026/8/29 20:32:25

OLLMA部署LFM2.5-1.2B-Thinking:模型热更新机制与多版本灰度发布实践

OLLMA部署LFM2.5-1.2B-Thinking&#xff1a;模型热更新机制与多版本灰度发布实践 1. 模型介绍与核心优势 LFM2.5-1.2B-Thinking是一个专为设备端部署设计的文本生成模型&#xff0c;它在LFM2架构基础上进行了深度优化。这个模型最大的特点是"小而精"——虽然只有1.…

作者头像 李华