leetcode2397. 被列覆盖的最多行数

news2025/1/17 6:03:30

目录

题目

思路

解题方法


题目

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.coloradmin.cn/o/1358107.html

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

相关文章

scipy.signal 详解

scipy.signal 详解 scipy.signal 模块是 SciPy 库中用于信号处理的重要模块。它提供了许多用于数字信号处理、滤波、频谱分析、傅里叶变换、卷积等操作的函数和工具。以下是一些 scipy.signal 模块中常用的函数和功能&#xff1a; 滤波函数 FIR/IIR 滤波器设计 &#xff1a; …

如何解决大语言模型的幻觉问题

如何解决大模型的「幻觉」问题&#xff1f; 什么是大模型「幻觉」 在人类生活中&#xff0c;幻觉表示虚假的但是我们分辨不清楚的事物&#xff0c;在大语言模型中&#xff0c;[幻觉]即代表模型生成的虚假的文本&#xff0c;这中情况很容易导致一些错误的发生 造成大模型「幻觉…

VMware17安装Centos 7.9

1.下载VMware17&#xff0c;下载 VMware Workstation Pro | CN 没有注册码&#xff0c;某多&#xff0c;某宝2元子买一个&#xff1b; 2.下载centos7.9镜像&#xff0c; 3.选择稍后安装操作系统 (如果选择安装程序光盘映像文件&#xff0c;则会按照最小系统自动安装) 4.选择…

电商快递运费对账教程

电商快递运费对账&#xff0c;有没有什么方法&#xff0c;能够事半功倍&#xff1f;回答这个问题之前&#xff0c;我们先来看看电商卖家们&#xff0c;为什么需要对账&#xff1f;基本上都是怎么对账的&#xff1f; 我们都知道&#xff0c;电商与快递行业存在着一定的“共生关…

vue-打包

打包的作用 说明&#xff1a;vue脚手架只是开发过程中&#xff0c;协助开发的工具&#xff0c;当真正开发完了>脚手架不参与上线 打包的作用&#xff1a; 1&#xff09;将多个文件压缩合并成一个文件 2&#xff09;语法降级 3&#xff09;less sass ts语法解析 打包后…

图像分割实战-系列教程8:unet医学细胞分割实战6(医学数据集、图像分割、语义分割、unet网络、代码逐行解读)

&#x1f341;&#x1f341;&#x1f341;图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 unet医学细胞分割实战1 unet医学细胞分割实战2 unet医学细胞分割实战3 unet医学细胞分割实战4 unet…

麒麟KYLINOS操作系统上扩容系统盘

原文链接&#xff1a;麒麟KYLINOS操作系统上扩容系统盘 hello&#xff0c;大家好啊&#xff01;继之前我们讨论了如何在统信UOS上扩容数据盘之后&#xff0c;今天我要给大家带来的是在麒麟KYLINOS操作系统上扩容系统盘与数据盘的方法。随着数据的不断增长&#xff0c;系统盘或数…

Nginx 的SSL证书配置

目录 1.申请域名&#xff0c;证书下载 2.准备站点源代码 3.修改nginx 对应网站的配置文件 4.修改 host 文件 http协议访问的网站默认会显示不安全&#xff0c;因为数据默认是明文传输的 https是httpssl&#xff0c;ssl是加密协议&#xff0c;通过证书来进行加密的&#xff…

promethues grafana 安装和使用

文章目录 1、promethues安装2、node-exporter安装3、grafana安装4、配置promethues监控node节点5、grafana操作外传 Docker 镜像下载地址&#xff1a; https://hub.docker.com 比较好的hub.docker.com///-- https://hub.docker.com/u/bitnami grafana监控面板&#xff1a;https…

使用Docker方式安装Artifactory

1、安装前环境准备 首先要关闭防火墙&#xff0c;关闭Selinux&#xff0c;准备好安装好的docker。以下安装版本&#xff1a;7.19.10 ##关闭防火墙&#xff0c;并设置开机自关闭 systemctl stop firewalld.service systemctl disable firewalld.service ##查看防火墙状态 sy…

越早学会这个配电柜技术,对你的帮助越大!

在当今数字化时代&#xff0c;电力作为社会生产和生活的基石之一&#xff0c;其可靠性和稳定性对于各行各业至关重要。 配电柜作为电力系统的核心组件&#xff0c;其有效的监控与管理成为确保电力供应安全的关键环节。为了满足这一需求&#xff0c;配电柜监控系统应运而生&…

【shell漫步】2 运算符

碎碎念 上一章介绍了各种变量的定义和使用&#xff0c;这次要针对数字和文本这两种基本数据类型进行运算和判断了&#xff0c;shell中的运算包括&#xff1a; 对数字类型 算术运算&#xff08;对数字的 数学 运算&#xff09;关系运算&#xff08;用来做数字的条件判断&…

力扣-42.接雨水

题目&#xff1a; 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组[0,1,0,2…

GraphQL 工具推荐:打造高效的开发环境

GraphQL 工具 本文章&#xff0c;会列举一些好用的 GraphQL 工具&#xff0c;他们可以大大提升你在开发中使用 GraphQL 的效率哦&#xff01; Prisma 你可以这么理解&#xff0c;Prisma 是一个 ORM 的库&#xff0c;让你使用 GraphQL 查询时&#xff0c;可以使用对象的形式去…

图像分割-Grabcut法

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 本文的C#版本请访问&#xff1a;图像分割-Grabcut法(C#)-CSDN博客 GrabCut是一种基于图像分割的技术&#xff0c;它可以用于将图像…

vue中key的用法

加key是提升vue渲染效率&#xff0c;减少DOM操作。 vue列表元素的更新机制&#xff1a; 当列表元素没有设置key的时候&#xff0c;vue判断是否操作这个DOM元素&#xff0c;是根据新旧两次数据的元素顺序进行对比&#xff0c;看一下元素内容是否发生变化。发生变化vue就操作这个…

关于Python里xlwings库对Excel表格的操作(二十八)

这篇小笔记主要记录如何【如何使用“Chart类”和“Api类"为新图表设置标题文本内容、字体、字号、粗细、正斜、颜色】。 前面的小笔记已整理成目录&#xff0c;可点链接去目录寻找所需更方便。【目录部分内容如下】【点击此处可进入目录】 &#xff08;1&#xff09;如何…

大数据Doris(四十六):物化视图查询改写和适用场景

文章目录 物化视图查询改写和适用场景 一、查询改写

移动神器RAX3000M路由器不刷固件变身家庭云之六(高级应用):设置https

本系列文章&#xff1a; 移动神器RAX3000M路由器变身家庭云之一&#xff1a;开通SSH&#xff0c;安装新软件包 移动神器RAX3000M路由器变身家庭云之二&#xff1a;安装vsftpd 移动神器RAX3000M路由器变身家庭云之三&#xff1a;外网访问家庭云 移动神器RAX3000M路由器变身家庭云…

c# 学习笔记 - 枚举

文章目录 1. 枚举1.1 枚举结构梳理1.2 枚举完整代码1.3 枚举知识点补充 2. 迭代两种命名空间接口3. yield语句 1. 枚举 1.1 枚举结构梳理 结构图   上图内容可能依旧不通俗易懂&#xff0c;这里使用最简明的话语告诉大家实现方式. foreach语句就是集合的遍历操作&#xff0c…