当前位置: 首页 > news >正文

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

目录链接:

力扣编程题-解法汇总_分享+记录-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.lryc.cn/news/94164.html

相关文章:

  • ChatGPT实战:生成演讲稿
  • 在线搭建K8S,kubernetes集群v1.23.9,docker支持的最后一个版本
  • http自动跳转https的配置方法
  • 重新初始化k8s集群
  • JetBrains编程IDE将具备Ai助手功能,或将提高开发速度
  • 【网络原理】TCP/IP协议五层模型
  • 【备战秋招】每日一题:2023.05.10-华为OD机试(第二题)-解密
  • 【华为OD机试】矩阵最大值(python, java, c++, js)
  • 通过USB和wifi连接真机编写第一个脚本
  • 【javascript】 javascript对象函数 总结
  • LVS+Keepalived 高可用群集实战部署
  • MCU启动过程
  • Mysql 5.6使用配置文件my.ini来设置长时间连接数据库
  • 改进YOLOv5/YOLOv8:复现结合即插即用 | 高效多尺度注意力(EMA),模块成为YOLOv5改进的小帮手
  • 图像色彩增强论文调研
  • ORACLE透明网关ODBC连接MYSQL
  • Flutter网络请求框架Dio源码分析以及封装(二)--Cookie管理分析
  • Unity如何设计一个技能系统
  • 测试流程体系
  • Linux下CentOS KVM 虚拟化
  • < vue + ElementUi 组件封装:实现弹窗展示富文本数据,允许全文搜索高亮显示搜索内容 >
  • MATLAB 之 低层绘图操作和光照及材质处理
  • LLM-Client一个轻量级的LLM集成工具
  • leetcode动态数组vector实现杨辉三角
  • 第二十三章_Redis高性能设计之epoll和IO多路复用深度解析
  • 基于OpenCV-车辆检测项目(简易版)
  • 用python获取海康摄像机视频
  • 【Linux】遇事不决,可先点灯,LED驱动的进化之路---2
  • 【计算机网络】数据链路层--点对点协议PPP
  • 【⑦MySQL】· 一文了解四大子查询