LeetCode 1253. 重构 2 行二进制矩阵(贪心)
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 行二进制矩阵(贪心)相关推荐
- leetcode 贪心_利用贪心算法解LeetCode第1253题:重构2行二进制矩阵
题目描述 给你一个 2 行 n 列的二进制数组:矩阵是一个二进制矩阵,这意味着矩阵中的每个元素不是 0 就是 1.第 0 行的元素之和为 upper.第 1 行的元素之和为 lower.第 i 列(从 ...
- leetcode1253. 重构 2 行二进制矩阵(贪心算法)
给你一个 2 行 n 列的二进制数组: 矩阵是一个二进制矩阵,这意味着矩阵中的每个元素不是 0 就是 1. 第 0 行的元素之和为 upper. 第 1 行的元素之和为 lower. 第 i 列(从 ...
- Leetcode算法Java全解答--73. 矩阵置零
Leetcode算法Java全解答–73. 矩阵置零 文章目录 Leetcode算法Java全解答--73. 矩阵置零 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 给定 ...
- rref--计算行阶梯矩阵
[功能简介]求行阶梯形式矩阵. [语法格式] 1.R=rref(A) 用高斯-约旦消元法和行主元法求A的行阶梯矩阵R.用默认误差(max(size(A))*eps *norm(A,inf))测试可以忽 ...
- java两个二进制数求和,Leetcode 67:Add Binary(二进制求和)
Leetcode 67:Add Binary(二进制求和) (python.java) Given two binary strings, return their sum (also a binar ...
- Matlab如何删除矩阵中的零元素,重新整理不等行的矩阵
现在我有的是一个50行,1832列的矩阵,但是其每一列上有效的数字并不多,且不相等,其余都是没用的0元素.那么如何删除矩阵中的零元素,重新整理不等行的矩阵?先上结论. 结论:最方便的还是转化成Cell ...
- Leetcode1091_二进制矩阵中的最短路径(Java+BFS解法)
Leetcode1091题:二进制矩阵中的最短路径(Java+BFS解法) 文章目录 Leetcode1091题:二进制矩阵中的最短路径(Java+BFS解法) 1.题目链接 2.解题思想 3.Jav ...
- Python3 矩阵求最简行阶梯矩阵
由于在Python numpy库中没有直接对Matrix求RREF的方法,度娘了好久发现在另一个科学计算包sympy中可以利用A.rref()的方法对Matrix直接求RREF,但是有另一个问题,大家 ...
- LeetCode简单题之二进制矩阵中的特殊位置
题目 给你一个大小为 rows x cols 的矩阵 mat,其中 mat[i][j] 是 0 或 1,请返回 矩阵 mat 中特殊位置的数目 . 特殊位置 定义:如果 mat[i][j] == 1 ...
最新文章
- 运维基础--Linux用户和组的管理
- 购物商城Web开发第十二天
- Kettle使用_16 闭包Closure Generator树形数据
- java httpclient教程_HttpClient4.5.2 HTTP协议的请求和执行
- vue的props实现父组件变化子组件一起变化
- 开源纯C#工控网关+组态软件(三)加入一个新驱动:西门子S7
- 小程序购物车抛物线(贝塞尔曲线实现)
- SQLite | Group By 和 Order By 子句
- 设置xy轴名称_最强干货来了:Grasshopper运算器名称总结(上篇)
- python生成一个数组_在for循环中创建多个数组(Python)
- 超硬核详解SpringClould之Gateway网管【含源码例子】
- UDP数据包的产生和发送
- python 中的 Fraction和GCD求最大公约数
- Unity资源加载之Assetbundle(一)
- 【Codeforces Round #548(Div. 2)】Edgy Trees(数学+bfs求连通块)
- Python print 玩转点阵字
- 【EMNLP 2021】SimCSE:句子嵌入的简单对比学习 【CVPR 2021】理解对比学习损失函数及温度系数
- vue封装上拉菜单组件_Vue的灵活的lil上下文菜单组件
- 5G(NSA)注网流程
- 计算机专业毕业设计指导记录表,计算机专业毕业设计教学模式
热门文章
- python如何避免转义字符_如何解决因转义字符而报错的问题(在使用python导入文件时)...
- 第三季2:ORTP库的源码分析、RTP发送实验的源码分析
- C++远航之封装篇——析构函数
- win10查看端口占用
- Linux下精准踢掉登录用户-pkill命令
- 纯CSS方块转化梯形动画
- 数学图形(1.33) 棕子曲线
- FC网络学习笔记02 -网络配置方法
- UVa 11636 Hello World!
- Request.Params[CategoryID]