1 条题解
-
0
题目理解
我们有一个 的网格,其中 # 表示方块,. 表示空格。水平或垂直相邻的方块属于同一个物体。所有物体同时向下掉落,直到:
碰到网格底部,或者
碰到下方的其他物体## 关键观察 物体识别:使用 Flood Fill 或并查集找出所有连通块(物体)
下落距离计算:对于每个物体,计算它能下落的最大距离
最终位置确定:根据下落距离重新放置物体
算法步骤
步骤 1:识别物体(连通块) 遍历整个网格,对每个未访问的 # 进行 BFS/DFS
记录每个连通块包含的所有坐标
为每个连通块分配唯一 ID
步骤 2:计算每个物体的下落距离 对于每个连通块:
找出块中每个列的最低方块位置
对于每列,计算从该列最低方块到下方障碍物的距离
整个物体的下落距离 = 所有列下落距离的最小值
步骤 3:重新构建最终网格 创建空的结果网格(全为 .)
对于每个连通块,将其所有方块向下移动计算出的下落距离
在结果网格的对应位置放置 #
时间复杂度
识别连通块:
计算下落距离:
总体复杂度:,满足 的要求
优化技巧
预处理列信息:预先计算每列从每个位置向下的空格数,避免重复计算
批量处理:对每个连通块整体计算下落距离,而不是逐个方块计算
内存优化:使用原地标记或压缩存储来减少内存使用
- 1
信息
- ID
- 4484
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者