You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java:统计二维Boolean数组应用规则后剩余的false数量

解决二维Boolean数组剩余false统计问题

咱们先把规则再明确一遍,避免理解偏差:只要某一行或者某一列中存在至少一个true,那么这整行和整列里的所有false都不算入最终统计;只有那些完全不在任何含true的行/列里的false,才是我们要统计的目标。

核心思路

要高效解决这个问题,不用每次遇到true就反复遍历行和列(那样容易重复操作,效率低),可以分两步走:

  • 第一步:先扫一遍数组,用两个集合记录下所有包含true的行号和列号,这样后续查询是否属于“需排除的行/列”时,时间复杂度是O(1)。
  • 第二步:要么再次遍历数组统计符合条件的false,要么直接通过计算得到结果(优化版)。

代码示例(Python)

基础遍历版

适合刚接触这类问题的同学,逻辑直观:

def count_remaining_false(array):
    if not array or not array[0]:
        return 0
    
    rows_with_true = set()
    cols_with_true = set()
    
    # 第一步:标记所有含true的行和列
    for i in range(len(array)):
        for j in range(len(array[0])):
            if array[i][j]:
                rows_with_true.add(i)
                cols_with_true.add(j)
    
    # 第二步:统计符合条件的false
    count = 0
    for i in range(len(array)):
        if i in rows_with_true:
            continue  # 这行有true,直接跳过整行
        for j in range(len(array[0])):
            if j not in cols_with_true and not array[i][j]:
                count += 1
    
    return count

优化计算版

如果数组规模较大,这个版本效率更高——因为排除了含true的行/列后,剩余的交叉区域里一定全是false(否则该行/列会被标记为含true),所以直接计算区域大小即可:

def count_remaining_false_optimized(array):
    if not array or not array[0]:
        return 0
    
    rows_with_true = set()
    cols_with_true = set()
    
    for i in range(len(array)):
        for j in range(len(array[0])):
            if array[i][j]:
                rows_with_true.add(i)
                cols_with_true.add(j)
    
    valid_rows = len(array) - len(rows_with_true)
    valid_cols = len(array[0]) - len(cols_with_true)
    
    # 有效行和有效列的交叉区域全是false
    return valid_rows * valid_cols

举个例子验证

就用题目里提到的场景:

matrix = [
    [True, False, False],
    [False, False, False],
    [False, False, False]
]
  • 含true的行是{0},含true的列是{0}
  • 有效行数量是3-1=2,有效列数量是3-1=2
  • 最终统计结果是2*2=4,和预期完全一致。

内容的提问来源于stack exchange,提问作者antimuon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:26:29