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

统计与至少一个其他节点同行或同列的节点数量

问题分析与优化方案

你需要统计网格中至少与另一个1处于同一行或同一列的1的数量,你的实现思路是可行的,但在可读性和效率上还有优化空间,以下是具体分析和改进方案:

原代码回顾

grid=[[0,0,0,0],[1,1,1,1],[0,0,0,1],[0,0,1,1],[0,0,0,1]]
rowlen=len(grid)
collen=len(grid[0])
rd={i: 0 for i in range(rowlen)}
cd={i: 0 for i in range(collen)}
cl=[]
rl=[]
for (rowi, row) in enumerate(grid):
    for (coli,x) in enumerate(row):
        if x>0:
            cd[coli]=cd[coli]+1
            rd[rowi]=rd[rowi]+1
            cl.append(coli)
            rl.append(rowi)

coords=zip(rl,cl)
coordslist=list(coords)
bools=[int(bool(((rd[a]-1) or (cd[b]-1)))) for (a,b) in coordslist]
answer=sum(bools)

优化点说明

  • 用列表替代字典存行列计数:行和列的索引是连续的0到长度-1,列表的访问、更新效率比字典更高,代码也更简洁。
  • 简化判断逻辑:原代码中(rd[a]-1) or (cd[b]-1)的本质是判断该行/列的1数量是否大于1,直接写成row_counts[r] > 1 or col_counts[c] > 1更直观,无需额外的减法和布尔转换。
  • 避免不必要的列表转换:zip(rl, cl)生成的迭代器可直接遍历,不需要转成list,节省内存开销。
  • 变量命名更直观:把rd改为row_counts、cd改为col_counts,降低阅读成本。

优化后的代码

grid = [[0,0,0,0],[1,1,1,1],[0,0,0,1],[0,0,1,1],[0,0,0,1]]
row_count = len(grid)
col_count = len(grid[0]) if row_count > 0 else 0

# 用列表初始化行列计数,默认值为0
row_counts = [0] * row_count
col_counts = [0] * col_count
ones_coords = []

# 第一次遍历:统计行列的1数量,同时收集所有1的坐标
for row_idx, row in enumerate(grid):
    for col_idx, val in enumerate(row):
        if val == 1:
            row_counts[row_idx] += 1
            col_counts[col_idx] += 1
            ones_coords.append((row_idx, col_idx))

# 统计符合条件的1的数量
answer = sum(1 for (r, c) in ones_coords if row_counts[r] > 1 or col_counts[c] > 1)

超大网格场景的额外优化(可选)

如果处理的是极大网格,还可以省掉存储所有1坐标的内存,分两次遍历完成统计:

grid = [[0,0,0,0],[1,1,1,1],[0,0,0,1],[0,0,1,1],[0,0,0,1]]
row_count = len(grid)
col_count = len(grid[0]) if row_count > 0 else 0

row_counts = [0] * row_count
col_counts = [0] * col_count

# 第一次遍历:先统计所有行列的1数量
for row_idx, row in enumerate(grid):
    for col_idx, val in enumerate(row):
        if val == 1:
            row_counts[row_idx] += 1
            col_counts[col_idx] += 1

# 第二次遍历:直接统计符合条件的1
answer = 0
for row_idx, row in enumerate(grid):
    for col_idx, val in enumerate(row):
        if val == 1 and (row_counts[row_idx] > 1 or col_counts[col_idx] > 1):
            answer += 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:55:19