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

题目描述

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

提交结果:

417535c8c43cc02052b09e100d3c52bf.png

参考

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么苹果内购总是失败_IOS用户支付失败 购买无法完成解决教程

格斗江湖iOS系统用户玩家&#xff0c;最近在充值的时候出现无法完成或者充值失败提示。这是怎么回事呢?出现上面的提示时&#xff0c;我们首先需要从自己“可控”的范围内查找原因。一、未越狱系统1、检查下自己的Apple ID是否有足够余额。2、中国大陆地区Apple ID账号&#x…

python中怎么创建配置文件_如何在Django中创建配置文件注册表单?

我试图创建一个定制的注册表单&#xff0c;但是我不知道如何去做&#xff0c;因为我试图将默认的django注册与一个新的模型连接起来。在这是它看起来的样子&#xff0c;可能是错的&#xff0c;但我正在考虑这样的事情。在模型.pyclass Profile(models.Model):user models.OneT…

pgadmin连接服务器失败_增值税发票税控软件:连接服务器失败是否使用离线文件进行更新?...

增值税发票税控软件&#xff1a;连接服务器失败是否使用离线文件进行更新&#xff1f;第一步&#xff1a;确认本地电脑是否可以正常打开网页&#xff1b;打开电脑&#xff0c;网页查看一下是否可以正常上网&#xff0c;打开百度发现&#xff0c;可以正常上网。第二步&#xff1…

移除镜像_这是否是你心目中的英雄联盟手游?镜像地图。水晶塔,传送移除

自从5月29日之后&#xff0c;RIOT官方放出了英雄联盟手游最新开发者日志后。关于视频内展示的多个游戏关键内容。在玩家群体中引起了大量的争议和讨论。以下是争议和讨论最多的内容1.游戏内英雄的攻击是否为AOE伤害?在大多数的玩家心中&#xff0c;英雄联盟手游是不应该有这种…

python数据算法有哪些_python算法与数据结构-常用查找算法一(37)

一、什么是查找查找(Searching)就是根据给定的某个值&#xff0c;在查找表中确定一个其关键字等于给定值的数据元素(或记录)。查找表(Search Table)&#xff1a;由同一类型的数据元素(或记录)构成的集合关键字(Key)&#xff1a;数据元素中某个数据项的值&#xff0c;又称为键值…

circlegan_【源码解读】cycleGAN(二) :训练

训练的代码见于train.py&#xff0c;首先定义好网络&#xff0c;两个生成器A2B, B2A和两个判别器A, B&#xff0c;以及对应的优化器(优化器的设置保证了只更新生成器或判别器&#xff0c;不会互相影响)###### Definition of variables #######NetworksnetG_A2B Generator(opt.i…

电脑重启bootmgr_电脑出现bootmgr is missing怎么办

展开全部电脑开机&#xff0c;或者重启以后显示&#xff1a;Bootmgr is missing, 是代表硬盘的主引导记录(MBR)出错&#xff0c;从而导致无法引e68a8462616964757a686964616f31333337613931导系统&#xff0c;哪只能重建主引导记录&#xff0c;还有一个可能是丢失系统文件&…

python tkinter text改变文本字体颜色_如何更改Tkinter中文本的颜色?

在Tkinter图形用户界面中&#xff0c;我无法确定如何更改文本的颜色。我试着让Label1变成红色&#xff0c;Label2变成蓝色&#xff0c;Label3变成棕色&#xff0c;Label4变成黄色&#xff0c;但我似乎想不出来。提前谢谢&#xff1a;)import randomfrom Tkinter import * #dont…

qt 在label上以光标位置进行缩放_缩放|位移|渐变简单动画

本文简单介绍Qt的一些动画效果(缩放&#xff0c;位移&#xff0c;渐变)。缩放动画将窗口的geometry(位置&#xff0c;大小)属性作为动画参考实现缩放动画。代码QWidget *w new QWidget;w->setWindowTitle(QStringLiteral("缩放动画Qt君"));w->resize(320, 240)…

虚拟机中ubuntu可以使用显卡吗_在KVM下使用ubuntu19.10安装Anbox

导言&#xff1a;Anbox是一个Android模拟器&#xff0c;可以从linux系统运行Android应用程序或游戏。对于Anbox的安装已经有了各种教程&#xff0c;主要针对ubuntu18.04之前的版本。最近在做一个关于虚拟机中跑安卓的项目&#xff0c;因此在虚拟机中使用ubuntu18.04系统&#x…

mysql tree_MySQL树形遍历(二)

转载自:http://blog.csdn.net/dreamer0924/article/details/7580278英文原文:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/预排序遍历树算法&#xff1a;modified preorder tree traversal algorithm这个算法有如下几个数据结构1 lft 代表左 left2 r…

python导入pillow模块_Python:argparse模块和pillow-image

刚入门学python&#xff0c;最近照着实验楼做了一个基础的练手项目&#xff1a;图像转字符画&#xff0c;里面用到了argparse和pillow-image。看了python关于这个函数的介绍和网上的一些教程&#xff0c;想把重点整理出来&#xff0c;正好最近发现前一天还挺明白的内容&#xf…

mysql 常用数据库连接池_常见的数据库连接池

欢迎进入Java社区论坛&#xff0c;与200万技术人员互动交流 >>进入 2.C3P0 在Hibernate和Spring中默认支持该数据库连接池 需要引入&#xff1a;c3p0-0.9.1.2.jar包&#xff0c;如果报错再引入mchange-commons-0.2.jar 1. 在类路径下编写一个c3p0-config.xml文件 c3p0-co…

win32_bios 的对象编辑器无法保存对象_怎样创建Femap对象

创建Femap对象主要有两种方式&#xff0c;一是直接在Femap内置的API程序窗体中创建&#xff0c;二是在API程序窗口以外的开发环境中创建。一、使用FEMAP集成的API程序窗口开始使用FEMAP API的最快方法是打开API编程窗口。它提供了一个完整的编辑、调试和运行的环境&#xff0c;…

nginx 在阿里云怎么安装mysql_阿里云Linux服务器安装 nginx+mysql+php

阿里云Linux服务器安装 nginxmysqlphp步骤1、登录服务器2、下载安装包3、将安装包上传到服务器的/home目录下注:使用rz sz命令进行本地和服务器间的上传、下载&#xff0c;安装命令yum install -y lrzsz4、解压安装包注:使用yum install unzip -y安装解压工具&#xff0c;安装完…

未定义变量: data_三、变量声明

三、变量声明var声明主要特点&#xff1a; - var是函数作用域&#xff0c;只针对函数声明 - 可以多次声明同一个变量不会报错 - 捕获变量怪异之处function fnVar(flag: boolean) {if(flag) {var x 10;}return x; } fnVar(true); // 10 fnVar(false); // undefinedvar isDone: …

阿帕奇链接mysql_apache guacamole 使用mysql 连接

1.创建一个临时文件夹&#xff0c;用来存放mysql-java连接器mkdir tempauth2.下载相关文件cd tempauthwget https://jaist.dl.sourceforge.net/project/guacamole/current/extensions/guacamole-auth-jdbc-0.9.14.tar.gzwget https://cdn.mysql.com//Downloads/Connector-J/mys…

表单的默认提交方式_对于PHP表单提交有哪集中方式讲解

PHP 做网页后端还是很优秀的&#xff0c;PHP 表单提交&#xff0c;不外乎两种方法&#xff0c;即 GET 和 POST 方法&#xff1b;PHP后台使用全局变量$_POST;$_GET;来获取提交数据。代码&#xff1a;<!DOCTYPE HTML> <html> <head><meta charset"utf-…

spring中怎么让事物提交_Spring怎么在一个事务中开启另一个事务

点击上方“Java知音”&#xff0c;选择“置顶公众号”技术文章第一时间送达&#xff01;作者&#xff1a;Mazinmy.oschina.net/u/3441184/blog/893628Spring项目&#xff0c;需要在一个事务中开启另一个事务。上面提到的情景可能不常见&#xff0c;但是还是会有的&#xff0c;一…

通过对象指针的方式强行指定到子类_C++中的虚指针与虚函数表

​ 最近在逛B站的时候发现有候捷老师的课程&#xff0c;如获至宝。因此&#xff0c;跟随他的讲解又复习了一遍关于C的内容&#xff0c;收获也非常的大&#xff0c;对于某些模糊的概念及遗忘的内容又有了更深的认识。以下内容是关于虚函数表、虚函数指针&#xff0c;而C中的动态…