leetcode2397. 被列覆盖的最多行数

目录

题目

思路

解题方法


题目

https://leetcode.cn/problems/maximum-rows-covered-by-columns/description/

给你一个下标从 开始、大小为 m x n 的二进制矩阵 matrix ;另给你一个整数 numSelect,表示你必须从 matrix 中选择的 不同 列的数量。

如果一行中所有的 1 都被你选中的列所覆盖,则认为这一行被 覆盖 了。

形式上,假设 s = {c1, c2, ...., cnumSelect} 是你选择的列的集合。对于矩阵中的某一行 row ,如果满足下述条件,则认为这一行被集合 s 覆盖

  • 对于满足 matrix[row][col] == 1 的每个单元格 matrix[row][col]0 <= col <= n - 1),col 均存在于 s 中,或者
  • row 中 不存在 值为 1 的单元格。

你需要从矩阵中选出 numSelect 个列,使集合覆盖的行数最大化。

返回一个整数,表示可以由 numSelect 列构成的集合 覆盖 的 最大行数 。

示例 1:

输入:matrix = [[0,0,0],[1,0,1],[0,1,1],[0,0,1]], numSelect = 2
输出:3
解释:
图示中显示了一种覆盖 3 行的可行办法。
选择 s = {0, 2} 。
- 第 0 行被覆盖,因为其中没有出现 1 。
- 第 1 行被覆盖,因为值为 1 的两列(即 0 和 2)均存在于 s 中。
- 第 2 行未被覆盖,因为 matrix[2][1] == 1 但是 1 未存在于 s 中。
- 第 3 行被覆盖,因为 matrix[2][2] == 1 且 2 存在于 s 中。
因此,可以覆盖 3 行。
另外 s = {1, 2} 也可以覆盖 3 行,但可以证明无法覆盖更多行。

示例 2:

输入:matrix = [[1],[0]], numSelect = 1
输出:2
解释:
选择唯一的一列,两行都被覆盖了,因为整个矩阵都被覆盖了。
所以我们返回 2 。

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 12
  • matrix[i][j] 要么是 0 要么是 1
  • 1 <= numSelect <= n

思路


我们观察一下数据,n<=12,所以我们可以遍历所有的列的组合,再判断此时有多少行被覆盖,保留被覆盖的最多的那一组数

解题方法


我们在编写代码过程中,使用了二进制保存状态,row数组记录每一行的二进制,但需要注意的是,我们记录的是这一行对应的二进制数的对称的那个数,比如,011,我们记录为110,即6,因为我们最终只要统计出现的最大次数,所以记录形式并不影响最终结果
 


class Solution {public int maximumRows(int[][] matrix, int numSelect) {int m = matrix.length,n=matrix[0].length;int[] row = new int[m];for(int i=0;i<m;i++){for(int j=0;j<n;j++){row[i] |= matrix[i][j]<<j;}}int cnt = 0;for(int i=0;i<(1<<n);i++){if(Integer.bitCount(i) == numSelect){int currentRows = 0;for(int j=0;j<m;j++){if((row[j] & i) == row[j]) {currentRows+=1;}cnt = Math.max(currentRows,cnt);}}}return cnt;}
}

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

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

相关文章

jq——记录页面滚动位置,重开后滚动定位到指定位置——js基础积累

jq—记录页面滚动位置&#xff0c;重开后定位到指定位置—js基础积累 需求解决思路解决步骤1&#xff1a;给table的每一行添加一个唯一的id解决步骤2&#xff1a;给编辑按钮添加一个data-id并添加点击事件解决步骤3&#xff1a;页面重载时的写法 需求 需求&#xff1a;当前页面…

有关ruoyi 项目菜单框如何设置国际化----附上完整代码

1. i18n的由来 i18n 全称Internationalization&#xff0c;因为单词太长中间18个字母被省略&#xff0c;缩写为18&#xff0c;这样就变成了18n。顾名思义&#xff0c;它是用来提供国际化的 那接下来就讲讲如何在ruoyi 项目里使用&#xff1a; 2. 安装插件 npm install vu…

Linux第1步_VMware软件安装

1、双击“VMware-workstation-full-15.5.0-14665864”&#xff0c;得到下面的界面&#xff1a; 2、等待几分钟&#xff0c;得到下面的界面&#xff1a; 3、点击“下一步” 4、勾选“我接受许可协议中的条款(A)”&#xff0c;见下图&#xff1a; 5、点击“下一步”&#xff0c;得…

DataGridView密码列

想用DataGridView来显示密码&#xff0c;但又不要那么容易就显示出来&#xff0c;只有选中该密码列的单元格时才显示密码&#xff0c;不选中时则不显示&#xff0c;搜索一圈&#xff0c;发现都是采用EditingControlShowing、CellFormatting的&#xff0c;而且那些办法完全没有意…

Qt/C++编写视频监控系统82-自定义音柱显示

一、前言 通过音柱控件实时展示当前播放的声音产生的振幅的大小&#xff0c;得益于音频播放组件内置了音频振幅的计算&#xff0c;可以动态开启和关闭&#xff0c;开启后会对发送过来的要播放的声音数据&#xff0c;进行运算得到当前这个音频数据的振幅&#xff0c;类似于分贝…

Golang 通用代码生成器仙童已发布 2.4.0 电音仙女尝鲜版三及其介绍视频,详细介绍了 Oracle 代码生成

Golang 通用代码生成器仙童已发布 2.4.0 电音仙女尝鲜版三及其介绍视频&#xff0c;详细介绍了 Oracle 代码生成 Golang 通用代码生成器仙童已发布 2.4.0 电音仙女尝鲜版三及其介绍视频。详细介绍了 Oracle 代码生成。即生成后端数据库为 Oracle 的 golang web 代码。并同时生…

hotspot源码角度看OOP之类属性的底层实现

问题分析 在计算机的世界里&#xff0c;一个问题的解决方案永远不止一种。但是取舍过后&#xff0c;最合适的只剩唯一。当然&#xff0c;你能想到的解决方案的多少&#xff0c;与你对这个问题的理解程度是息息相关的。对于一个问题的理解程度&#xff0c;与你的技术视野紧密不可…

一文读懂Solana 上最正统的铭文通证$mash

早在 2023 年的 11 月&#xff0c;包括 Solana、Avalanche、Polygon、Arbitrum、zkSync 等生态正在承接比特币铭文生态外溢的价值。当然&#xff0c;因铭文赛道过于火爆&#xff0c;当 Avalanche、BNB Chain 以及 Polygon 等链上 Gas 飙升至极值&#xff0c;Arbitrum、zkSync 等…

linux创建pyspark虚拟环境

一、创建虚拟环境 conda create -n test python3.6.6 二、注意添加镜像 vi /root/.condarc channels:- http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/- http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/- http://mirrors.ustc.edu.cn/anaconda/pkgs/ma…

你的第一个C/S程序

目录 socket服务端代码客户端代码执行结果 socket socket基础知识 服务端代码 import socket import threading import timeMSG_LENGTH 64 DISCONNECTED !CONNECTION CLOSED connections 0#定义服务器地址 server_ip socket.gethostbyname(socket.gethostname()) server…

【金猿CIO展】现代咨询CIO崔恩博:数字化转型,CIO不仅要懂技术和业务,更要“懂人”...

‍ 崔恩博 本文由现代咨询CIO崔恩博撰写并投递参与“数据猿年度金猿策划活动——2023大数据产业年度优秀CIO榜单及奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 最近几年&#xff0c;大数据行业的发展备受关注&#xff0c;尤其是2019年以后&#xff0c;随着企业…

leetcode13 罗马数字转整数

题目描述&#xff1a;罗马数字由七种字符组成&#xff0c;分别为 I、V、X、L、C、D 和 M&#xff0c;对应的数值分别为 1、5、10、50、100、500 和 1000。在一般情况下&#xff0c;小的数字位于大的数字右边&#xff0c;但有特殊情况&#xff0c;如 IV 表示 4&#xff0c;IX 表…