2732. 找到矩阵中的好子集

Powered by:NEFU AB-IN

Link

文章目录

  • [2732. 找到矩阵中的好子集](#2732. 找到矩阵中的好子集)

2732. 找到矩阵中的好子集

题意

给你一个下标从 0 开始大小为 m x n 的二进制矩阵 grid 。

从原矩阵中选出若干行构成一个行的 非空 子集,如果子集中任何一列的和至多为子集大小的一半,那么我们称这个子集是 好子集。

更正式的,如果选出来的行子集大小(即行的数量)为 k,那么每一列的和至多为 floor(k / 2) 。

请你返回一个整数数组,它包含好子集的行下标,请你将其 升序 返回。

如果有多个好子集,你可以返回任意一个。如果没有好子集,请你返回一个空数组。

一个矩阵 grid 的行 子集 ,是删除 grid 中某些(也可能不删除)行后,剩余行构成的元素集合。

思路

由于数组中的元素类型只有0和1,列最多五行,那么可以举行的个数的例子

比如如果一行全是0,是可行的;比如 0101010101这种互补的形式,或者0101000001这种,也是成立

如果答案是三行,那么肯定包括一行和两行的情况,所以只需要考虑1,2行,2行的时候考虑二进制逐位与运算

代码

python 复制代码
# import
from functools import cache
from sys import setrecursionlimit, stdin, stdout, exit
from collections import Counter, deque, defaultdict
from heapq import heapify, heappop, heappush, nlargest, nsmallest
from bisect import bisect_left, bisect_right
from datetime import datetime, timedelta
from string import ascii_lowercase, ascii_uppercase
from math import log, gcd, sqrt, fabs, ceil, floor
from types import GeneratorType
from typing import TypeVar, List, Dict, Any, Callable


# Data structure
class SA:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __lt__(self, other):
        return self.x < other.x


# Constants
N = int(2e5 + 10)  # If using AR, modify accordingly
M = int(20)  # If using AR, modify accordingly
INF = int(2e9)
E = int(100)

# Set recursion limit
setrecursionlimit(INF)

# Read
input = lambda: stdin.readline().rstrip("\r\n")  # Remove when Mutiple data
read = lambda: map(int, input().split())
read_list = lambda: list(map(int, input().split()))


# Func
class std:

    # Recursion
    @staticmethod
    def bootstrap(f, stack=None):
        if stack is None:
            stack = []

        def wrappedfunc(*args, **kwargs):
            if stack:
                return f(*args, **kwargs)
            else:
                to = f(*args, **kwargs)
                while True:
                    if isinstance(to, GeneratorType):
                        stack.append(to)
                        to = next(to)
                    else:
                        stack.pop()
                        if not stack:
                            break
                        to = stack[-1].send(to)
                return to

        return wrappedfunc

    letter_to_num = staticmethod(lambda x: ord(x.upper()) - 65)  # A -> 0
    num_to_letter = staticmethod(lambda x: ascii_uppercase[x])  # 0 -> A
    array = staticmethod(lambda x=0, size=N: [x] * size)
    array2d = staticmethod(
        lambda x=0, rows=N, cols=M: [std.array(x, cols) for _ in range(rows)])
    max = staticmethod(lambda a, b: a if a > b else b)
    min = staticmethod(lambda a, b: a if a < b else b)
    filter = staticmethod(lambda func, iterable: list(filter(func, iterable)))


# ---------------------------------------------------------------Division line ------------------------------------------------------------------


class Solution:

    def goodSubsetofBinaryMatrix(self, grid: List[List[int]]) -> List[int]:
        # 挑一行
        n, m = len(grid), len(grid[0])
        for i in range(n):
            row = grid[i]
            if sum(row) == 0:
                return [i]

        # 挑两行
        binary_map = {}
        for i in range(n):
            row_binary = int("".join(map(str, grid[i])), 2)
            for existing_row_binary, index in binary_map.items():
                if row_binary & existing_row_binary == 0:  # 逐位与运算
                    return sorted([index, i])
            binary_map[row_binary] = i

        return []
相关推荐
Star Learning Python9 分钟前
《简单线性代数》-20260414
线性代数·决策树·机器学习
AI科技星17 小时前
v=c 物理理论核心参数转换表达式大全
开发语言·线性代数·算法·数学建模·平面
_日拱一卒18 小时前
LeetCode:240搜索二维矩阵Ⅱ
数据结构·线性代数·leetcode·矩阵
闪闪发亮的小星星18 小时前
比较两个旋转矩阵的误差
线性代数·矩阵
计算机安禾1 天前
【数据结构与算法】第43篇:Trie树(前缀树/字典树)
c语言·开发语言·矩阵·排序算法·深度优先·图论·宽度优先
Jasmine_llq1 天前
《B3955 [GESP202403 二级] 小杨的日字矩阵》
线性代数·顺序输入输出算法·双重循环遍历算法·条件分支判断算法·中间行定位算法·边界字符输出算法·逐行格式控制算法
AI科技星1 天前
张祥前统一场论中两个电荷定义的统一性解析
开发语言·线性代数·算法·数学建模·平面
wsoz1 天前
Leetcode矩阵-day7
c++·算法·leetcode·矩阵
做cv的小昊1 天前
【TJU】研究生应用统计学课程笔记(1)——第一章 数理统计的基本知识(1.1 数理统计的基本内容、1.2 数理统计的基本概念)
笔记·线性代数·考研·数学建模·ai·矩阵·概率论
minglie11 天前
线性代数中的五空间
线性代数