​LeetCode解法汇总253. 重构 2 行二进制矩阵

news2024/6/30 0:30:52

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

给你一个 2 行 n 列的二进制数组:

  • 矩阵是一个二进制矩阵,这意味着矩阵中的每个元素不是 0 就是 1
  • 第 0 行的元素之和为 upper
  • 第 1 行的元素之和为 lower
  • 第 i 列(从 0 开始编号)的元素之和为 colsum[i]colsum 是一个长度为 n 的整数数组。

你需要利用 upperlower 和 colsum 来重构这个矩阵,并以二维整数数组的形式返回它。

如果有多个不同的答案,那么任意一个都可以通过本题。

如果不存在符合要求的答案,就请返回一个空的二维数组。

示例 1:

输入:upper = 2, lower = 1, colsum = [1,1,1]
输出:[[1,1,0],[0,0,1]]
解释:[[1,0,1],[0,1,0]] 和 [[0,1,1],[1,0,0]] 也是正确答案。

示例 2:

输入:upper = 2, lower = 3, colsum = [2,2,1,1]
输出:[]

示例 3:

输入:upper = 5, lower = 5, colsum = [2,1,2,0,1,0,1,2,0,1]
输出:[[1,1,1,0,1,0,0,1,0,0],[1,0,1,0,0,0,1,1,0,1]]

提示:

  • 1 <= colsum.length <= 10^5
  • 0 <= upper, lower <= colsum.length
  • 0 <= colsum[i] <= 2

解题思路:

* 解题思路:

* 题目本身不难,但是需要考虑的点还是比较多的。

* 首先分别用两个数组line1和line2记录第一行和第二行的值。

* 首先遍历一遍,如果遇到0,则跳过,遇到2,则两行各加1,并且相应的减少upper和lower的数量。

* 如果第一次遍历下来,lower和upper的数量少于0,则直接返回失败。

* 第二次遍历则找colsum[i]==1的情况,此时先减掉upper,等到upper=0则减lower。

* 最后看upper和lower的结果是否为0即可。

代码:

class Solution1253
{
public:
    vector<vector<int>> reconstructMatrix(int upper, int lower, vector<int> &colsum)
    {
        vector<vector<int>> result;
        vector<int> line1(colsum.size());
        vector<int> line2(colsum.size());

        for (int i = 0; i < colsum.size(); i++)
        {
            if (colsum[i] == 0)
            {
                line1[i] = 0;
                line2[i] = 0;
                continue;
            }
            if (colsum[i] == 2)
            {
                line1[i] = 1;
                line2[i] = 1;
                upper--;
                lower--;
            }
        }
        if (upper < 0 || lower < 0)
        {
            return result;
        }
        for (int i = 0; i < colsum.size(); i++)
        {
            if (colsum[i] != 1)
            {
                continue;
            }
            if (upper > 0)
            {
                upper--;
                line1[i] = 1;
                line2[i] = 0;
                continue;
            }
            if (lower > 0)
            {
                lower--;
                line1[i] = 0;
                line2[i] = 1;
                continue;
            }
            return result;
        }
        if (upper == 0 && lower == 0)
        {
            result.push_back(line1);
            result.push_back(line2);
            return result;
        }
        return result;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/699114.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据迁移工具,用这8种!

前言 最近有些小伙伴问我&#xff0c;ETL数据迁移工具该用哪些。 ETL(是Extract-Transform-Load的缩写&#xff0c;即数据抽取、转换、装载的过程)&#xff0c;对于企业应用来说&#xff0c;我们经常会遇到各种数据的处理、转换、迁移的场景。 今天特地给大家汇总了一些目前…

chatgpt赋能python:Python遍历n中所有数字

Python 遍历 n 中所有数字 Python 是一种高级编程语言&#xff0c;它被广泛用于许多应用程序和领域&#xff0c;如机器学习、人工智能和数据可视化等。Python 在处理数字时非常方便&#xff0c;因为它支持大量的数字操作和运算。在这篇文章中&#xff0c;我们将讨论如何使用 P…

C++制作简易计算器

C简易计算器 C简易计算器栈栈(Stack)的特点栈的相关概念栈的常用操作为栈的常见分类实例计算器概念代码实现测试 效果展示 简易计算器实现的功能&#xff1a; 基本的加减乘除、表达式错误判断、除法运算分母不能为0、支持多项式表达计算&#xff0c;自己封装一个模板栈、封…

介绍 9 个研发质量度量指标

研发质量管理中的 MTTR、MTBF、MTTF、MTTD 都是什么&#xff1f;今天我们从生产事件的全生命周期出发&#xff0c;认识研发质量管理的 9 个度量指标——「MT 家族」。 01 Mean Time To ALL 「MT」是 Mean Time 的缩写&#xff0c;意为平均时间&#xff0c;「MT 家族」则是 Li…

OpenStack(T版)——仪表板(Horizon)服务介绍与安装

文章目录 OpenStack(T版)——仪表板(Horizon)服务介绍与安装安装和配置Horizon仪表板服务组件(1)安装软件包(2)修改配置文件(3)修改httpd文件完成安装 访问 OpenStack(T版)——仪表板(Horizon)服务介绍与安装 Openstack项目中的Horrizon仪表板服务组件是以Web界面形式展示各项…

【shell脚本百炼成魔】shell脚本之函数实战

前言 文章目录 前言函数的概念函数的基本语法1.使用关键字 function&#xff1a;2.直接使用函数名和大括号&#xff1a; 函数的简单案例案例一&#xff0c;欢迎函数案例二&#xff1a;购物清单 函数的传参1. 位置参数2. 命令替换3. 数组参数 函数的返回值1. 判断函数的执行结果…

SVNKit 1.10.8: svn add和svn commit方法总结

SVNKit 1.10.8: svn add和svn commit方法实现总结&#xff1a; doAdd(java.io.File path, boolean force, boolean mkdir, boolean climbUnversionedParents, SVNDepth depth, boolean depthIsSticky, boolean includeIgnored, boolean makeParents) 参数是的含义及作用&…

实现淘宝母婴订单实时查询和可视化|Flink-Learning实战营

为进一步帮助开发者学习使用 Flink&#xff0c;Apache Flink 中文社区近期发起 Flink-Learning 实战营项目。本次实战营通过真实有趣的实战场景帮助开发者实操体验 Flink&#xff0c;课程包括实时数据接入、实时数据分析、实时数据应用的场景实。并结合小松鼠助教模式&#xff…

K8s组件:etcd安装、使用及原理(Linux)

K8s组件&#xff1a;etcd安装、使用及原理&#xff08;Linux&#xff09; 1 介绍及安装 1.1 介绍 分布式系统架构中对一致性要求很高&#xff0c;etcd就满足了分布式系统中的一致性要求。 实现了分布式一致性键值对存储的中间件&#xff0c;支持跨平台&#xff0c;有活跃的…

交互式标注工具-Paddlelabel

PaddleLabel 是基于飞桨 PaddlePaddle 各个套件功能提供的配套标注工具。目前支持对分类、检测、分割、OCR 四种常见的计算机视觉任务数据集进行标注和管理&#xff0c;除基础的手动标注功能外也支持深度学习辅助标注&#xff0c;可以有效地提升标注效率。重点是free free free…

玩转代码|那些实用的JavaScript单行代码,帮你轻松工作

目录 数组去重 从url获取参数并转为对象 检查对象是否为空 反转字符串 生成随机十六进制 检查当前选项卡是否在后台 检测元素是否处于焦点 检查设备类型 文字复制到剪贴板 获取选定的文本 查询某天是否为工作日 转换华氏/摄氏 两日期之间相差的天数 将 RGB 转换为…

并发-编程之JMMvolatile详解

并发三大特性&#xff1a;可见性、原子性、有序性 并发都是数据【多线程对一个变量进行连续加1】 线程A和B都对count进行连续加1&#xff0c;因为count不是原子性&#xff0c;如果再执行countcount1之前cpu执行权被抢占&#xff0c;就会阻塞住&#xff0c;这时候线程B完成count…

基于Java车库智能管理平台设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

Java | 使用切面AOP拦截并修改Controller接口请求参数

关注common wx&#xff1a; CodingTechWork 引言 在开发过程中&#xff0c;会有一些需求将controller层的一些方法入参进行全量转换&#xff0c;最容易想到的可能是在调用下层service方法时&#xff0c;调用公共的方法进行入参转换&#xff0c;这时带来的唯一问题就是代码不雅…

TCP的粘包、拆包、解决方案以及Go语言实现

什么是粘包&#xff0c;拆包&#xff1f; TCP的粘包和拆包问题往往出现在基于TCP协议的通讯中&#xff0c;比如RPC框架在使用TCP进行数据传输时&#xff0c;由于TCP是基于字节流的协议&#xff0c;而不是基于消息的协议&#xff0c;可能会出现粘包&#xff08;多个消息粘在一起…

基于matlab创建基于颜色特征的图像检索系统(附源码)

一、前言 此示例说明如何使用自定义的功能包工作流创建基于内容的图像检索 &#xff08;CBIR&#xff09; 系统。 基于内容的图像检索 &#xff08;CBIR&#xff09; 系统用于查找在视觉上与查询图像相似的图像。CBIR系统的应用可以在许多领域找到&#xff0c;例如基于网络的…

记账APP:小哈记账4——记账首页页面的制作(1)

项目介绍&#xff1a; 小哈记账是一款用于记账APP&#xff0c;基于Android Studio开发工具&#xff0c;采用Java语言进行开发&#xff0c;同时使用litepal和阿里云数据库进行数据的增删查改&#xff0c;以图标的形式在App的界面上显示。App可以清晰显示收支情况&#xff0c;并以…

2. MongoDB分片集群架构实战-----MongoDB分片集群和多文档事务详解

分布式技术MongoDB 1. 分片简介2. MongoDB分片集群架构3. 环境搭建3.1 分片集群搭建3.2 使用mtools搭建分片集群 4 使用分片集群5. 分片策略5.1 什么是chunk5.2 分片算法5.3 哈希分片5.4 分片标签5.4 分片键(ShardKey)的选择5.5 分片键(ShardKey)的约束 6. 数据均衡6.1 均衡的方…

【JAVAWEB】JavaScript基础知识

目录 1.认识JavaScript 1.1JavaScript是什么 1.2JavaScript和html,css的关系 1.3JavaScript的组成 2.JavaScript的前置知识 2.1JavaScript的书写形式 行内式 内嵌式 外部式 2.2注释 2.3输入输出 3.JavaScript的语法知识 3.1变量的使用 创建变量 使用变量 3.2动态…

echarts柱状图查找数据

controller层&#xff1a; /*** 查询最近一周每天的行为识别总人数* return*/ApiOperation("查询最近一周每天的行为识别总人数") // RequiresPermissions("zhgd:aialarmdata:selectShu")GetMapping("/selectShu")public List<List> se…