题目描述

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

解题思路[1]

使用贪心算法,大致思路为:

  1. 若 colsum[i]=2colsum[i]=2,则 一定上下均为 1;
  2. 若 colsum[i]=0colsum[i]=0,则 一定上下均为 0;
  3. 若 colsum[i]=1colsum[i]=1,则 上下一个 1 一个 0。

唯一需要讨论的只有 colsum[i]=1colsum[i]=1 的情形,我们可以规定:在把2分配完之后,先分配上为 1,再分配下为 1。

代码如下(代码有点长,但是思路很容易看懂)

class Solution {public:vector<vector<int>> reconstructMatrix(int upper, int lower, vector<int>& colsum) {int length=colsum.size(),sum=0;vector <vector<int>> res;for(int i=0;i<length;i++){if(colsum[i]==2)//为2时,上下均需要分配1,此时lower和upper需要减去分配的1{lower--;upper--;}else if(colsum[i]==1)sum+=1;}//总数不相符合,或者上下某一行的数不符合则返回空vectorif(sum!=lower+upper || lower<0 || upper<0)return res;vector<int> a1,a2;for(int i=0;i<length;i++){if(colsum[i]==2){a1.push_back(1);a2.push_back(1);}else if(colsum[i]==0){a1.push_back(0);a2.push_back(0);}else//colsum[i]==1{if(upper>0)//上1,下0{a1.push_back(1);a2.push_back(0);upper--;}else if(lower>0)//上0,下1{a1.push_back(0);a2.push_back(1);lower--;}elsereturn res;}}res.push_back(a1);res.push_back(a2);return res;}
};

提交结果:

参考

  1. ^https://leetcode-cn.com/problems/reconstruct-a-2-row-binary-matrix/solution/java-tan-xin-suan-fa-xiang-jie-by-amanehayashi/

leetcode 贪心_利用贪心算法解LeetCode第1253题:重构2行二进制矩阵相关推荐

  1. LeetCode 1253. 重构 2 行二进制矩阵(贪心)

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

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

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

  3. 深度优先遍历和广度优先遍历_利用广度优先搜索解LeetCode第515题:在每个树行中找最大值...

    题目描述(难度中等) 您需要在二叉树的每一行中找到最大的值. 示例: 输入: 1/ 3 2/ 5 3 9 输出: [1, 3, 9] 解题思路 利用广度优先搜索找到每一层的所有数字,将其中最大的数字存 ...

  4. leetcode 高薪_利用两种不同的方法解LeetCode第1312题:让字符串成为回文串的最少插入次数

    题目描述(难度困难) 给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符.请你返回让 s 成为回文串的 最少操作次数 . 「回文串」是正读和反读都相同的字符串. 示例 1: 输入: ...

  5. php算法在线刷题,c,算法_每日一道算法:leetcode 刷题碰到的问题。,c,算法 - phpStudy...

    每日一道算法:leetcode 刷题碰到的问题. 这是题目: Given an unsorted array nums, reorder it such that nums[0] < nums[ ...

  6. 题解——两种算法解Leetcode题库第977题(暨双指针法小结)

    一.Leetcode题库第977题题目 977. 有序数组的平方 二.解法一--暴力解法 算法思路:for循环遍历数组,对数组元素做平方操作:调用sorted()函数对处理后的数组进行快速排序 算法时 ...

  7. leetcode 打印_剑指 Offer 总结 - leetcode 剑指offer系列

    剑指 Offer 系列完结撒花!! 本篇文章是对整个系列的精华总结, 对系列的每篇文章进行了分类, 并用一句话概括每道题的思路, 方便大家理解和记忆, 当然也包含原文完整链接供大家参考 总的来说, 写 ...

  8. mfc 找到字符串中字符_利用滑动窗口解LeetCode438题:找到字符串中所有字母异位词...

    题目描述(难度中等) 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 ...

  9. 贪心算法(leetcode分类解题,C++代码详细注释)

    贪心算法 前言 455.分发饼干 135.分发糖果 435.无重叠区间 605.种花问题 452.用最小数量的箭引爆气球 763.划分字母区间 122. 买卖股票的最佳时机 II 376. 摆动序列 ...

最新文章

  1. Azure Arc 正式商用、Power Platform+GitHub 世纪牵手,一文看懂 Ignite 2020
  2. 设计模式的理解:对23个设计模式的总结
  3. BugKuCTF WEB 备份是个好习惯
  4. Android 监听手机GPS打开状态
  5. 首个由国内发起的分布式消息领域的国际标准OpenMessaging一周年回顾
  6. storm-kafka源码分析
  7. java相册_精致小巧的java相册制作方法
  8. vba与python相比2019_重大改变!Python 或将取代 VBA 成为 Excel 官方脚本语言
  9. css grid随页面大小_CSS中的间距知识总结,前端开发中各种间距的使用及优缺点
  10. ​ [RHEL7.1]重新封装系统(制作模板)
  11. LUT Utility for FCPX(Luts调色文件加载工具)
  12. hdu3081 Marriage Match II
  13. 总结了一些很实用值得收藏的站点
  14. BP神经网络学习算法原理
  15. linux polkitd 漏洞,Ubuntu Linux中的特权提升漏洞Dirty Sock分析(含PoC)
  16. 计算机组成原理 全加器实验
  17. 气象大数据平台(天擎)数据读取方法(python)(地面资料下载)
  18. 企业发文的红头文件_公司红头文件格式范文6篇
  19. 论文阅读-2017-Vidal-NEARP
  20. 信息学奥赛一本通:1413:确定进制

热门文章

  1. Java并发编程笔记之FutureTask源码分析
  2. OpenStack 如何跨版本升级
  3. 低代码发展专访系列之六:低代码平台能解决业务重构的问题么?
  4. 漫话:如何给女朋友解释什么是元宇宙?
  5. 【只有光头才能变强,文末有xx】分享一波Lambda表达式
  6. 火热的云计算,你知道这些吗?
  7. 云漫圈 | 有趣的海盗问题 (完整版)
  8. 4阶范德蒙德行列式例题_线性代数入门——“爪型行列式”的计算及其应用
  9. mysql 防注入 php_PHP+mysql防止SQL注入的方法小结
  10. PHP与MySQL外文文献译文和原文_读懂外文文献的秘诀在这里丨49周新闻