Leetcode.2397 被列覆盖的最多行数

news2024/12/29 10:30:04

题目链接

Leetcode.2397 被列覆盖的最多行数 Rating : 1719

题目描述

给你一个下标从 0 开始的 m x n二进制矩阵 mat和一个整数 cols,表示你需要选出的列数。

如果一行中,所有的 1 都被你选中的列所覆盖,那么我们称这一行 被覆盖 了。

请你返回在选择 cols列的情况下,被覆盖 的行数 最大 为多少。

示例 1:

在这里插入图片描述

输入:mat = [[0,0,0],[1,0,1],[0,1,1],[0,0,1]], cols = 2
输出:3
解释:
如上图所示,覆盖 3 行的一种可行办法是选择第 0 和第 2 列。
可以看出,不存在大于 3 行被覆盖的方案,所以我们返回 3 。

示例 2:

在这里插入图片描述

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

提示:

  • m = = m a t . l e n g t h m == mat.length m==mat.length
  • n = = m a t [ i ] . l e n g t h n == mat[i].length n==mat[i].length
  • 1 < = m , n < = 12 1 <= m, n <= 12 1<=m,n<=12
  • mat[i][j]要么是 0要么是 1
  • 1 < = c o l s < = n 1 <= cols <= n 1<=cols<=n

分析:

一般题目给定的数据量在 [0,20]我们就要考虑能否使用 状态压缩 了。

对于每一行,我们都用一个二进制数 row[i]来表示。例如:1 1 1,三个位置都是 1就用 (111) = 7来表示。

也用一个二进制数 mask来表示要选的列,加入 mask的二进制表示,第 j位是 1的话,说明要选第 j列。否则不选第 j列。

我们只需要记录 bitCount(mask) == col的情况( bitCount(mask) == col代表选了 col列)。此时再遍历每一行,如果 (mask & row[i] ) == row[i],说明第 i行的所有的 1都被所选的列覆盖了,即第 i行是被完全覆盖了的。

时间复杂度: O ( m ∗ n + m ∗ 2 n ) O(m*n + m*2^n ) O(mn+m2n)

C++代码:

class Solution {
public:
    int maximumRows(vector<vector<int>>& matrix, int col) {
        int m = matrix.size() , n = matrix[0].size();
        vector<int> row(m);

        for(int i = 0;i < m;i++){
            for(int j = 0;j < n;j++){
                row[i] |= (matrix[i][j] << j);
            }
        }

        int ans = 0;
        for(int mask = 1;mask < (1 << n);mask++){
            if(__builtin_popcount(mask) == col){
                int cnt = 0;
                for(int j = 0;j < m;j++){
                    if((row[j] & mask) == row[j]) cnt++;
                }

                ans = max(ans,cnt);
            }
        }

        return ans;
    }
};

Java代码:

class Solution {
    private int bitCount(int x){
        int cnt = 0;
        while(x > 0){
            cnt++;
            x &= (x-1);
        }
        return cnt;
    }
    public int maximumRows(int[][] matrix, int cols) {
        int m = matrix.length;
        int 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 ans = 0;
        for(int mask = 1;mask < (1 << n);mask++){
            if(bitCount(mask) == cols){
                int cnt = 0;
                for(int j = 0;j < m;j++){
                    if((mask & row[j]) == row[j]) cnt++;
                }
                ans = Math.max(ans,cnt);
            }
        }
        return ans;
    }
}

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

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

相关文章

RabbitMQ的使用以及整合到SpringBoot中

RabbitMQ的使用以及整合到SpringBoot中 一、比较&#xff1a; (1)、传统请求服务器&#xff1a; (2)、通过MQ去操作数据库&#xff1a; 通过MQ去操作数据库&#xff0c;从而达到削峰的效果&#xff1b; 问题现象&#xff1a; (1)、海量数据&#xff1b; (2)、高并发&#…

Python如何获取弹幕?给你介绍两种方式

前言 弹幕可以给观众一种“实时互动”的错觉&#xff0c;虽然不同弹幕的发送时间有所区别&#xff0c;但是其只会在视频中特定的一个时间点出现&#xff0c;因此在相同时刻发送的弹幕基本上也具有相同的主题&#xff0c;在参与评论时就会有与其他观众同时评论的错觉。 在国内…

【SQLAlchemy】第二篇——连接失效及连接池

一、背景 为了节约资源&#xff0c;MySQL会对建立的连接进行监控&#xff0c;当某些连接处于不活跃状态的时间超过一个阈值时&#xff0c;则关闭它们。 用户可以执行show variables like %wait_timeout%;来查看这个阈值&#xff1a; 可以看到&#xff0c;在默认的情况下&…

Multi-modal Graph Contrastive Learning for Micro-video Recommendation

模型总览如下&#xff1a; 解决问题&#xff1a;同种重要性对待每种模态&#xff0c;可能使得得到的特征表示次优&#xff0c;例如过度强调学习到的表示中的特定模态。以MMGCN为例&#xff0c;下图为MMGCN模型总览。 如上图所示MMGCN在每种模态上构建用户-物品二部图&#xff0…

【云原生】Gateway网关选型

网关一般分为流量网关和业务网关&#xff0c;流量网关负责接入所有的流量&#xff0c;并分发给不同的子系统&#xff0c;那在具体的业务接入之前&#xff0c;还有一层业务网关。流量网关提供全局性的、与后端业务应用无关的策略&#xff0c;例如 HTTPS证书卸载、Web防火墙、全局…

[vue]vue3.x 组合式API不同写法

[vue]vue3.x 组合式API不同写法改进后组合API实际实际使用中的疑问组件名称问题两种写法的优缺点对比优点缺点组合式API&#xff0c;采用了更加灵活的方式,官网推荐的语法糖&#xff0c;但仅限于比较简单的单文件&#xff0c;作为尝试 改进后组合API实际实际使用中的疑问 改进…

4-2 Linux进程和内存概念

文章目录前言进程状态进程优先级内存模型进程内存关系前言 进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源。一般来说&#xff0c;Linux系统会在进程之间共享程序代码和系统函数库&#xff0c;所以在任何时刻内存中都只有代码的一份拷贝。 进程状态…

36_2 On Chip Bus —— AXI总线介绍

目录 1.AXI总线介绍&#xff08;读2写3&#xff09; 1.1流量控制 1.2 AXI signals 信号线 1.3重点信号线的介绍 1.4原子操作——让读改写一套操作 永远是一个master对一个slave 1.5AXI BURST Boundary——一个burst不能跨4k boundary&#xff0c;master要保证 1.6读/写通…

k8s中的PV和PVS

前言&#xff1a;容器磁盘上的文件的生命周期是短暂的&#xff0c;这就使得在容器中运行重要应用时会出现一些问题。首先&#xff0c;当容器崩溃时&#xff0c;kubelet 会重启它&#xff0c;但是容器中的文件将丢失——容器以干净的状态&#xff08;镜像最初的状态&#xff09;…

Python 算法交易实验51 Step2 Signals 信号生成

说明 不可不读书 先从经典的一些超简单信号开始 使用移动平均指标SMA(算术&#xff09; 给出了信号的产生方法&#xff0c;还有一些测算结果&#xff0c;反正看起来都是盈利的 首先使用离线方法实验一组结果&#xff0c;然后就使用ADBS来进行类似的处理。 内容 1 原理分析…

【python中的列表和元组】

文章目录前言一、列表及其使用1.列表的特点2. 列表的使用方法二、元组及其特点1.元组的类型是tuple1.元组的查找操作2. 计算元组某个元素出现的次数3.统计元组内元素的个数总结前言 本文着重介绍python中的列表和元组以及列表和元组之间的区别 一、列表及其使用 1.列表的特点…

JavaSE学习进阶day2_02 抽象类和接口

第四章 抽象类 4.1 概述 4.1.1 抽象类引入 先看一张图&#xff1a; 这张图时之前学习继承时用的&#xff0c;但是现在有一个疑问&#xff0c;吃饭这个行为猫和狗都有&#xff0c;但是它们吃的东西却又不同&#xff0c;这个时候我们不能确定父类吃饭这个方法到底该写什么&…

数据库分库分表策略

一、MySQL扩展具体的实现方式 随着业务规模的不断扩大&#xff0c;需要选择合适的方案去应对数据规模的增长&#xff0c;以应对逐渐增长的访问压力和数据量。 关于数据库的扩展主要包括&#xff1a;业务拆分、主从复制&#xff0c;数据库分库与分表。这篇文章主要讲述数据库分库…

03-SQLPlus的常用命令和使用

本章内容讲解SQLPlus的常用命令使用方法&#xff0c;参数的设置&#xff0c;帮助的使用&#xff0c;详细讲解如下&#xff1a; 登录SQL*Plus DOS方式登录SQL*Plus C:\>sqlplus 提示输入用户名、密码 C:\>sqlplus scott/tiger 连到默认数据库,注册表或环境变量中设 …

Blender——植物生长动画制作

效果图前言参考链接&#xff1a;https://www.bilibili.com/video/BV1aY411G7bk/?spm_id_from333.788.recommend_more_video.10&vd_source5212838c127b01db69dcc8b2d27ca517建议Blender的版本在3.0.0或以上。制作完成的植物生长动画blender文件下载&#xff1a;https://dow…

SpringCloud之ElasticSearch笔记

ElasticSearch 初识ElasticSearch ElasticSearch是什么 ElasticSearch一个基于Lucene的底层的开源的分布式搜索引擎&#xff0c;可用来实现搜索&#xff0c;日志统计&#xff0c;分析&#xff0c;系统监控 正向索引和倒排索引 正向索引&#xff1a;逐条扫描&#xff08;my…

Databend v1.0 Release 正式发布

尊敬的 Databenders&#xff0c;在 Databend Labs 成立两周年之际&#xff0c;我们非常高兴地宣布 Databend v1.0 正式发布。 Databend 社区一直在致力于解决大数据分析的成本和复杂度问题&#xff0c;并正在被顶级场景和顶级需求所推动。 根据可统计信息&#xff0c;每天约 7…

2023年“中银杯”安徽省职业院校技能大赛网络安全A模块全过程解析

A模块基础设施设置/安全加固(200分) 一、项目和任务描述: 假定你是某企业的网络安全工程师,对于企业的服务器系统,根据任务要求确保各服务正常运行,并通过综合运用登录和密码策略、流量完整性保护策略、事件监控策略、防火墙策略等多种安全策略来提升服务器系统的网络安全…

K8S 实用工具之三 - 图形化 UI Lens

开篇 &#x1f4dc; 引言&#xff1a; 磨刀不误砍柴工工欲善其事必先利其器 第一篇&#xff1a;《K8S 实用工具之一 - 如何合并多个 kubeconfig&#xff1f;》第二篇&#xff1a;《K8S 实用工具之二 - 终端 UI K9S》 像我这种&#xff0c;kubectl 用的不是非常溜&#xff0c;经…

指针面试笔试题练习

前言 &#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f; c语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:介绍c语言中有关指针更深层的知识. 金句分享: ✨星光…