1253. 重构 2 行二进制矩阵

这篇具有很好参考价值的文章主要介绍了1253. 重构 2 行二进制矩阵。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1253. 重构 2 行二进制矩阵

给你一个 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]]

提示:文章来源地址https://www.toymoban.com/news/detail-604051.html

  • 1 <= colsum.length <= 10^5
  • 0 <= upper, lower <= colsum.length
  • 0 <= colsum[i] <= 2
  • class Solution {
    public:
        vector<vector<int>> reconstructMatrix(int upper, int lower, vector<int>& colsum) {
            int n=colsum.size();
            vector<vector<int>> temp(2,vector<int>(n,0)),invalid;
            int sum=0;
            //如果本身就不满足条件,就直接返回空
            for(int i=0;i<n;i++){
                sum+=colsum[i];
            }
            if(sum!=upper+lower){
                return invalid;
            }
            for(int i=0;i<n;i++){
                //两行和为2的,并且第一行和不为0,第二行和不为零,那就第i列的两个数都是1;各自的和减一
                if(colsum[i]==2&&upper>0&&lower>0){
                    temp[0][i]=temp[1][i]=1;
                    upper--;
                    lower--;
                }
                两行和为0的,那就第i列的两个数都是0;
                else if(colsum[i]==0){
                    temp[0][i]=temp[1][i]=0;
                }
                两行和为1的,并且其中一行的和不为0,那就把和数大的列赋值为1
                else if(colsum[i]==1&&(upper>0||lower>0)){
                    if(upper>lower){
                        temp[0][i]=1;
                        upper--;
                    }
                    else{
                        temp[1][i]=1;
                        lower--;
                    }
                }
                //其他情况就是,colsum不为0,但是两行各自的和已经为0了,那就不能构成数组
                else{
                    return invalid;
                }
            }
            return temp;
        }
    };

到了这里,关于1253. 重构 2 行二进制矩阵的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java数据结构与算法刷题-----LeetCode1091. 二进制矩阵中的最短路径

    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完): https://blog.csdn.net/grd_java/article/details/123063846 双分裂蛇:是求二维表中从起点到终点的经典思路(也是求无权图的最短路径问题的经典解法)。创建两条分裂蛇,分别从起点和

    2024年04月26日
    浏览(52)
  • 改进二进制粒子群算法在配电网重构中的应用(Matlab实现)【论文复现】

    目录  ​ 0 概述 1 配电网重构的目标函数 2 算例 3 matlab代码实现 配电系统中存在大量的分段开关和联络开关,配电网重构正是通过调整分段开关和联络升大的组合状态来变换网络结构,用于优化配电网某些指标,使其达到最优状态。正常运行时,则通过两类开关的不同组合状态

    2024年02月15日
    浏览(45)
  • 【JavaScript数据结构与算法】字符串类(计算二进制子串)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端(Node.js) 📃 个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀 未来打算: 为中国的工业软件事业效力 n 年 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目

    2024年02月05日
    浏览(47)
  • 数据结构与算法之字符串: Leetcode 696. 计数二进制子串 (Typescript版)

    计数二进制子串 https://leetcode.cn/problems/count-binary-substrings/ 描述 给定一个字符串 s,统计并返回具有相同数量 0 和 1 的非空(连续)子字符串的数量,并且这些子字符串中的所有 0 和所有 1 都是成组连续的。 重复出现(不同位置)的子串也要统计它们出现的次数。 示例 1: 示

    2024年02月01日
    浏览(60)
  • 【1091. 二进制矩阵中的最短路径】

    来源:力扣(LeetCode) 描述: 给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。 二进制矩阵中的 畅通路径 是一条从 左上角 单元格(即, (0, 0) )到 右下角 单元格(即, (n - 1, n - 1) )的路径,该路径同时满足下述要

    2024年02月08日
    浏览(49)
  • 数据结构:使用顺序栈的基本操作,实现十进制转为二进制,十六进制的转换

    使用系统环境: 1:win10,使用工具dev 2:使用系统win10 3:参考书籍数据结构(C语言版——严蔚敏 吴伟民) ( 注意:此文章默认,学习者拥有一定的数据机构栈,C语言的知识,书籍第20页,2.1算法的代码进行一个简化。)

    2024年02月05日
    浏览(66)
  • 力扣67. 二进制求和算法

    这道题需要,给你两个字符串比如 答案是:\\\"10101\\\" 然后需要你给出计算结果,那么我们很容易想到两种做法 1. 调库做法:直接转化为整数,然后用内置函数做进制转换直接计算出结果 2. 计算做法:将十进制思维移植过来,对每一位加并且做carry操作,最后得出结果 笔者最初

    2024年01月16日
    浏览(45)
  • 【算法题】67. 二进制求和

    给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 示例 1: 输入:a = \\\"11\\\", b = \\\"1\\\" 输出:\\\"100\\\" 示例 2: 输入:a = \\\"1010\\\", b = \\\"1011\\\" 输出:\\\"10101\\\" 提示: 1 = a.length, b.length = 10^4 a 和 b 仅由字符 \\\'0\\\' 或 \\\'1\\\' 组成 字符串如果不是 \\\"0\\\" ,就不含前导零

    2024年01月23日
    浏览(76)
  • 二进制算法题+回文链表

    先计算两个字符串公共的部分,需要维护三个变量:两个数组的指针idx+一个进位变量up 注意,这里用StringBuffer来存储结果,先存储的是个位,所以最后需要reverse一下。 21分钟 如何看一个字符是否在变化?维护一个temp变量来记录他上一次的结果。 模拟十进制转二进制:先对

    2024年02月07日
    浏览(45)
  • 2023-5-26 LeetCode每日一题(二进制矩阵中的最短路径)

    点击跳转到题目位置 给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。 二进制矩阵中的 畅通路径 是一条从 左上角 单元格(即,(0, 0))到 右下角 单元格(即,(n - 1, n - 1))的路径,该路径同时满足下述要求: 路径途

    2024年02月06日
    浏览(94)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包