LeetCode 417. 太平洋大西洋水流问题

简介: LeetCode 417. 太平洋大西洋水流问题

417. 太平洋大西洋水流问题


DFS

逆向思维,水往高处流。这样只用对矩形四条边进行搜索。完成后遍历矩阵寻找重合部分,即为两个大洋向上流都能到达的位置。


class Solution
{
public:
    vector<int> direction{-1, 0, 1, 0, -1};
    vector<vector<int>> pacificAtlantic(vector<vector<int>> &heights)
    {
        if (heights.empty() || heights[0].empty())
        {
            return {};
        }
        vector<vector<int>> ans;
        int m = heights.size();
        int n = heights[0].size();
        vector<vector<bool>> can_reach_p(m, vector<bool>(n, false));
        vector<vector<bool>> can_reach_a(m, vector<bool>(n, false));
        for (int i = 0; i < m; i++)
        {
            // 判定左右两边的水所能到达的范围
            DFS(heights, can_reach_p, i, 0);
            DFS(heights, can_reach_a, i, n - 1);
        }
        for (int i = 0; i < n; i++)
        {
            // 判定上下两边的水所能到达的范围
            DFS(heights, can_reach_p, 0, i);
            DFS(heights, can_reach_a, m - 1, i);
        }
        for (int i = 0; i < m; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if (can_reach_p[i][j] && can_reach_a[i][j])
                {
                    ans.push_back(vector<int>{i, j});
                }
            }
        }
        return ans;
    }
    void DFS(vector<vector<int>> &heights, vector<vector<bool>> &visited, int a, int b)
    {
        visited[a][b] = true;
        int m = heights.size();
        int n = heights[0].size();
        for (int i = 0; i < 4; i++)
        {
            int x = a + direction[i];
            int y = b + direction[i + 1];
            if (x >= 0 && x < m && y >= 0 && y < n && !visited[x][y] && heights[a][b] <= heights[x][y])
            {
                DFS(heights, visited, x, y);
            }
        }
    }
};
目录
相关文章
|
6月前
|
Go
golang力扣leetcode 417.太平洋大西洋水流问题
golang力扣leetcode 417.太平洋大西洋水流问题
45 0
|
6月前
leetcode-417:太平洋大西洋水流问题
leetcode-417:太平洋大西洋水流问题
33 0
LeetCode——417. 太平洋大西洋水流问题
LeetCode——417. 太平洋大西洋水流问题
140 0
LeetCode——417. 太平洋大西洋水流问题
LeetCode每日一题(11)——太平洋大西洋水流问题(递归,深度优先遍历实例)
大西洋太平洋水流问题 1.题目 2.示例 3.思路 理解题目 解题思路 4.代码
143 0
LeetCode每日一题(11)——太平洋大西洋水流问题(递归,深度优先遍历实例)
LeetCode每日一题——417. 太平洋大西洋水流问题
有一个 m × n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。
108 0
LeetCode每日一题——417. 太平洋大西洋水流问题
【LeetCode417】太平洋大西洋水流问题
(1)找出从太平洋出发的水所能到达的点:
127 0
【LeetCode417】太平洋大西洋水流问题
|
算法
LeetCode 0417「太平洋大西洋水流问题」
岛上雨水较多,如果相邻单元格的高度小于或等于当前单元格的高度,雨水可以直接向北、南、东、西流向相邻单元格。水可以从海洋附近的任何单元格流入海洋。
LeetCode 0417「太平洋大西洋水流问题」
|
算法
​LeetCode刷题实战417:太平洋大西洋水流问题
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
143 0
​LeetCode刷题实战417:太平洋大西洋水流问题