高效查找网格中两个非空单元格的坐标
高效查找2D网格中两个非空单元格的坐标
针对你的需求,这里有个非常高效的实现思路——既然只需要找到两个非空单元格,完全没必要遍历整个网格,一旦找到第二个目标就能立刻停止,能省不少冗余操作,尤其是当网格尺寸很大的时候。
核心思路
- 按行优先的顺序遍历网格(行索引从0开始计数)
- 对每一行逐个检查单元格内容
- 遇到非空的单元格(也就是值为
'O'的项),就记录它的(行号, 列号)坐标 - 一旦收集到两个坐标,直接终止所有遍历流程,不用再往下找
代码示例(Python)
def find_two_non_empty_cells(grid): non_empty_coords = [] # 遍历每一行,同时记录行索引 for row_index, row_content in enumerate(grid): # 遍历当前行的每个单元格,记录列索引 for col_index, cell in enumerate(row_content): # 判断是否为非空单元格 if cell != '.': non_empty_coords.append((row_index, col_index)) # 找到两个就立刻返回,不用继续遍历 if len(non_empty_coords) == 2: return non_empty_coords # 如果网格中非空单元格不足两个,返回已找到的所有(可根据需求调整逻辑) return non_empty_coords # 你的网格示例(这里仅展示前10行,完整网格是24行×40列) your_grid = [ '........................................', '........................................', '..O.....................................', '..OO....................................', '........................................', '........................................', '........................................', '........................................', '........................................', '........................................', # 剩余14行均为全'.'的行,此处省略 ] # 调用函数并打印结果 print(find_two_non_empty_cells(your_grid)) # 输出: [(2, 2), (3, 2)]
效率说明
这个方法的最优时间复杂度是O(1)(比如前两个单元格就是非空的),最坏情况才会遍历到网格深处,但因为找到目标就停止,实际运行效率会比全量遍历高很多,特别适合处理大尺寸的可变网格。
如果是用其他语言(比如Java、C#)实现,核心逻辑完全一致:嵌套循环检查单元格,收集到两个坐标后立即终止循环即可。
内容的提问来源于stack exchange,提问作者kabascolby
相关产品推荐
相关产品推荐

