2397. 被列覆盖的最多行数

63 阅读1分钟

题目:
leetcode.cn/problems/ma…

算法:
方法一:暴力

func maximumRows(matrix [][]int, numSelect int) int {
    m, n := len(matrix), len(matrix[0])
    mask := make([]int, m)
    for i := range matrix {
        for j := range matrix[i] {
            mask[i] = (matrix[i][j] << j) | mask[i]
        }
    }
    ans := 0
    for colMask := 0; colMask < 1 << n; colMask ++ {
        if countOfOne(colMask) != numSelect {
        // if bits.OnesCount(uint(colMask)) != numSelect {
            continue
        }
        count := 0
        for _, v := range mask {
            if colMask & v == v {
                count ++
            }
        }
        ans = max(count, ans)
    }
    return ans
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

func countOfOne(n int) int {
    ans := 0
    for n > 0 {
        if n & 1 == 1 {
            ans ++
        }
        n = n >> 1
        
    }
    return ans
}