LeetCode 1765 地图中的最高点

题目链接:LeetCode 1765 地图中的最高点

题目大意:

题解:
题目要求水域的高度必须为0,因此水域的高度是已经确定的值,我们可以从水域出发,推导出其余格子的高度。

  • 首先,计算与水域相邻的格子的高度。对于这些格子来说,其相邻格子中的最小高度即为水域的高度0,因此这些格子的高度为1
  • 然后,计算与高度为1的格子相邻的、尚未被计算过的格子的高度。对于这些格子来说,其相邻格子中的最小高度为1,因此这些格子的高度为2
  • 以此类推,计算出所有格子的高度。

可以用多源广度优先搜索来实现。

class Solution {
private:
    int dirs[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};

public:
    vector<vector<int>> highestPeak(vector<vector<int>>& isWater) {
        int m = isWater.size(), n = isWater[0].size();
        vector<vector<int>> ans(m, vector<int>(n, -1));
        queue<pair<int, int>> que;
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                if (isWater[i][j]) {
                    ans[i][j] = 0;
                    que.emplace(i, j);
                }
            }
        }
        while (!que.empty()) {
            auto& p = que.front();
            for (auto& dir : dirs) {
                int x = p.first + dir[0], y = p.second + dir[1];
                if (x >= 0 && x < m && y >= 0 && y < n && !(~ans[x][y])) {
                    ans[x][y] = ans[p.first][p.second] + 1;
                    que.emplace(x, y);
                }
            }
            que.pop();
        }
        return ans;
    }
};
posted @   ZZHHOOUU  阅读(35)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示