当前位置: 首页 > article >正文

floodfill算法系列一>太平洋大西洋水流问题

目录

  • 题目方法解析:
  • 代码设计:
  • 代码呈现:

题目方法解析:

这里是引用

代码设计:

这里是引用

代码呈现:

class Solution {
    int m,n;
    int[] dx = {0,0,-1,1};
    int[] dy = {-1,1,0,0};

    public List<List<Integer>> pacificAtlantic(int[][] heights) {
        m = heights.length; n = heights[0].length;
        boolean[][] pac = new boolean[m][n];
        boolean[][] atl = new boolean[m][n];

        //判断大西洋的水能否流到某一位置
        for(int i = 0; i < n; i++) dfs(heights,0,i,pac);
        for(int j = 0; j < m; j++) dfs(heights,j,0,pac);

        //判断太平洋的水能否流到某一位置
        for(int i = 0; i < m; i++) dfs(heights,i,n-1,atl);
        for(int j = 0; j < n; j++) dfs(heights,m-1,j,atl);

        List<List<Integer>> ret = new ArrayList<>();
        for(int i = 0; i < m; i++)
            for(int j = 0; j < n; j++){
                if(pac[i][j] && atl[i][j]){
                    List<Integer> tmp = new ArrayList<>();
                    tmp.add(i); tmp.add(j);
                    ret.add(tmp);
                }
            }

        return ret;
    }

    //封装出来一套标记遍历
    private void dfs(int[][] heights, int i, int j, boolean[][] vis){

        vis[i][j] = true;
        for(int k = 0; k < 4; k++){
            int x = i + dx[k]; int y = j + dy[k];
            if(x >= 0 && x < m && y >= 0 && y < n && !vis[x][y] && heights[x][y] >= heights[i][j]){
                dfs(heights,x,y,vis);
            }
        }
    }
}

http://www.kler.cn/a/548199.html

相关文章:

  • 西门子的通信负载是什么意思
  • 【Mysql】:如何恢复误删的数据?
  • 跳跃游戏 II - 贪心算法解法
  • RabbitMQ使用guest登录提示:User can only log in via localhost
  • 【WPSOffice】汇总
  • 运维-自动访问系统并截图
  • DeepSeek24小时写作机器人,持续创作高质量文案
  • 医院数智化转型下的大健康发展AI化多路径探析(上)
  • 【R语言】回归分析
  • 【C++内存管理】—— 策略、陷阱及应对之道
  • Qt工作总结03 <qSort按某一属性进行排序>
  • 解析 2025 工业边缘计算:三大技术风向的影响力
  • QEMU 搭建 Ubuntu x86 虚拟机
  • 力扣-二叉树-257 二叉树的所有路径
  • 关于Redis的主从复制(上)
  • LabVIEW 天然气水合物电声联合探测
  • excel中单元格字符串提取数字累加
  • stable diffusion 文生图流程
  • 认识与安装git
  • Android设备 网络安全检测