1. 题目

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

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

你需要利用 upper,lower 和 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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reconstruct-a-2-row-binary-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 贪心解题

class Solution {public:vector<vector<int>> reconstructMatrix(int upper, int lower, vector<int>& colsum) {int i, n = colsum.size(), sum = 0;for(i = 0; i < n; ++i)sum += colsum[i];if(upper+lower != sum || upper > n || lower > n)return {};    //肯定可以排除的情况vector<vector<int>> ans(2, vector<int> (n,0));for(i = 0; i < n; ++i){if(colsum[i] == 0)continue;if(colsum[i] == 2){ans[0][i] = ans[1][i] = 1;upper--,lower--;}else// colsum[i] == 1,平均着分配(贪心){  //优先分配多的,后面万一有2,别一个多,一个少,少的不够了if(lower >= upper){ans[1][i] = 1;lower--;}else{ans[0][i] = 1;upper--;}}if(lower < 0 || upper < 0)return {};   //不够了,肯定错了}return ans;}
};

LeetCode 1253. 重构 2 行二进制矩阵(贪心)相关推荐

  1. leetcode 贪心_利用贪心算法解LeetCode第1253题:重构2行二进制矩阵

    题目描述 给你一个 2 行 n 列的二进制数组:矩阵是一个二进制矩阵,这意味着矩阵中的每个元素不是 0 就是 1.第 0 行的元素之和为 upper.第 1 行的元素之和为 lower.第 i 列(从 ...

  2. leetcode1253. 重构 2 行二进制矩阵(贪心算法)

    给你一个 2 行 n 列的二进制数组: 矩阵是一个二进制矩阵,这意味着矩阵中的每个元素不是 0 就是 1. 第 0 行的元素之和为 upper. 第 1 行的元素之和为 lower. 第 i 列(从 ...

  3. Leetcode算法Java全解答--73. 矩阵置零

    Leetcode算法Java全解答–73. 矩阵置零 文章目录 Leetcode算法Java全解答--73. 矩阵置零 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 给定 ...

  4. rref--计算行阶梯矩阵

    [功能简介]求行阶梯形式矩阵. [语法格式] 1.R=rref(A) 用高斯-约旦消元法和行主元法求A的行阶梯矩阵R.用默认误差(max(size(A))*eps *norm(A,inf))测试可以忽 ...

  5. java两个二进制数求和,Leetcode 67:Add Binary(二进制求和)

    Leetcode 67:Add Binary(二进制求和) (python.java) Given two binary strings, return their sum (also a binar ...

  6. Matlab如何删除矩阵中的零元素,重新整理不等行的矩阵

    现在我有的是一个50行,1832列的矩阵,但是其每一列上有效的数字并不多,且不相等,其余都是没用的0元素.那么如何删除矩阵中的零元素,重新整理不等行的矩阵?先上结论. 结论:最方便的还是转化成Cell ...

  7. Leetcode1091_二进制矩阵中的最短路径(Java+BFS解法)

    Leetcode1091题:二进制矩阵中的最短路径(Java+BFS解法) 文章目录 Leetcode1091题:二进制矩阵中的最短路径(Java+BFS解法) 1.题目链接 2.解题思想 3.Jav ...

  8. Python3 矩阵求最简行阶梯矩阵

    由于在Python numpy库中没有直接对Matrix求RREF的方法,度娘了好久发现在另一个科学计算包sympy中可以利用A.rref()的方法对Matrix直接求RREF,但是有另一个问题,大家 ...

  9. LeetCode简单题之二进制矩阵中的特殊位置

    题目 给你一个大小为 rows x cols 的矩阵 mat,其中 mat[i][j] 是 0 或 1,请返回 矩阵 mat 中特殊位置的数目 . 特殊位置 定义:如果 mat[i][j] == 1 ...

最新文章

  1. 运维基础--Linux用户和组的管理
  2. 购物商城Web开发第十二天
  3. Kettle使用_16 闭包Closure Generator树形数据
  4. java httpclient教程_HttpClient4.5.2 HTTP协议的请求和执行
  5. vue的props实现父组件变化子组件一起变化
  6. 开源纯C#工控网关+组态软件(三)加入一个新驱动:西门子S7
  7. 小程序购物车抛物线(贝塞尔曲线实现)
  8. SQLite | Group By 和 Order By 子句
  9. 设置xy轴名称_最强干货来了:Grasshopper运算器名称总结(上篇)
  10. python生成一个数组_在for循环中创建多个数组(Python)
  11. 超硬核详解SpringClould之Gateway网管【含源码例子】
  12. UDP数据包的产生和发送
  13. python 中的 Fraction和GCD求最大公约数
  14. Unity资源加载之Assetbundle(一)
  15. 【Codeforces Round #548(Div. 2)】Edgy Trees(数学+bfs求连通块)
  16. Python print 玩转点阵字
  17. 【EMNLP 2021】SimCSE:句子嵌入的简单对比学习 【CVPR 2021】理解对比学习损失函数及温度系数
  18. vue封装上拉菜单组件_Vue的灵活的lil上下文菜单组件
  19. 5G(NSA)注网流程
  20. 计算机专业毕业设计指导记录表,计算机专业毕业设计教学模式

热门文章

  1. python如何避免转义字符_如何解决因转义字符而报错的问题(在使用python导入文件时)...
  2. 第三季2:ORTP库的源码分析、RTP发送实验的源码分析
  3. C++远航之封装篇——析构函数
  4. win10查看端口占用
  5. Linux下精准踢掉登录用户-pkill命令
  6. 纯CSS方块转化梯形动画
  7. 数学图形(1.33) 棕子曲线
  8. FC网络学习笔记02 -网络配置方法
  9. UVa 11636 Hello World!
  10. Request.Params[CategoryID]