LeetCode每日一题 | 2397. 被列覆盖的最多行数

题目描述

原题链接

给你一个下标从 0 开始、大小为 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 列构成的集合 覆盖 的 最大行数 。

问题分析

由于矩阵的列数小于等于12,因此我们可以将每一行的01值看作二进制表示的数,并将其转化为对应的十进制数。

借助Golangbits.OnesCount函数,枚举选择列的全部情况i,通过i与每一行对应的十进制数(蕴含了二进制的信息),进行与操作,判断该行是否被覆盖。

最终,统计所有列情况对应的覆盖行数的最大值。

程序代码(Golang 版本)

func maximumRows(matrix [][]int, numSelect int) int {
   
    m := len(matrix)
    if m == 0 {
   
        return 0
    }
    n := len(matrix[0])
    if numSelect >= n {
   
        return m
    }
    // 将每一行的二进制数转换成十进制数
    nums := make([]int, m)
    for i := 0; i < m; i++ {
   
        for j := 0; j < n; j++ {
   
            nums[i] += matrix[i][j] << (n - j - 1)
        }
    }
    res, maxNum := 0, 1 << n
    for i := 1; i < maxNum; i++ {
   
        if bits.OnesCount(uint(i)) != numSelect {
   
            continue;
        }
        cnt := 0
        for j := 0; j < m; j++ {
   
            if (nums[j] & i) == nums[j] {
   
                cnt++;
            }
        }
        res = max(res, cnt)
    }
    return res
}

最近更新

  1. TCP协议是安全的吗?

    2024-01-08 07:26:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-08 07:26:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-08 07:26:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-08 07:26:03       20 阅读

热门阅读

  1. Linux-rsync 服务器客户端模式同步

    2024-01-08 07:26:03       39 阅读
  2. SpringBoot-Dubbo-Zookeeper

    2024-01-08 07:26:03       40 阅读
  3. Python代码篇-小白必会(猜数字游戏)

    2024-01-08 07:26:03       37 阅读
  4. php加减乘除函数

    2024-01-08 07:26:03       46 阅读
  5. php将文本内容写入一个文件(面向过程写法)

    2024-01-08 07:26:03       39 阅读
  6. 03 详细的Git命令使用大全

    2024-01-08 07:26:03       36 阅读
  7. 利用Podman构建基于Fission env/builder的镜像

    2024-01-08 07:26:03       72 阅读
  8. 【2023年度总结】蜕变与挑战

    2024-01-08 07:26:03       139 阅读
  9. vue3学习记录

    2024-01-08 07:26:03       34 阅读