博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
417. Pacific Atlantic Water Flow
阅读量:7221 次
发布时间:2019-06-29

本文共 1493 字,大约阅读时间需要 4 分钟。

417. Pacific Atlantic Water Flow

题目链接:

思路是分别找到pacific和atlantic能够流到的地方,然后求两个地方的交集。找pacific和atlantic能流到的地方,就是这个matrix的遍历过程,可以用dfs或者bfs。复杂度没什么差,dfs写起来简单点。

public class Solution {    public List
pacificAtlantic(int[][] matrix) { List
result = new ArrayList(); if(matrix.length == 0 || matrix[0].length == 0) return result; m = matrix.length; n = matrix[0].length; boolean[][] pacific = new boolean[m][n]; boolean[][] atlantic = new boolean[m][n]; // dfs, for each position for(int i = 0; i < m; i++) { dfs(matrix, i, 0, pacific); dfs(matrix, i, n- 1, atlantic); } for(int j = 0; j < n; j++) { dfs(matrix, 0, j, pacific); dfs(matrix, m - 1, j, atlantic); } // find the intersection for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) { if(pacific[i][j] && atlantic[i][j]) result.add(new int[] {i, j}); } } return result; } int m, n; int[][] dirs = {
{0, -1}, {0, 1}, {-1, 0}, {1, 0}}; private void dfs(int[][] matrix, int x, int y, boolean[][] visited) { if(visited[x][y]) return; visited[x][y] = true; for(int[] dir : dirs) { int nx = x + dir[0], ny = y + dir[1]; if(nx >= 0 && nx < m && ny >= 0 && ny < n && matrix[x][y] <= matrix[nx][ny]) { dfs(matrix, nx, ny, visited); } } }}

转载地址:http://pvhym.baihongyu.com/

你可能感兴趣的文章
勒索软件从未停止
查看>>
《VMware Virtual SAN权威指南》一2.3.4 VMkernel网络
查看>>
AMD:将在机器学习GPU领域“引发从来没有过的竞争”
查看>>
《计算机视觉:模型、学习和推理》一2.4 条件概率
查看>>
Riverbed将SD-WAN融入WAN优化
查看>>
信息管税邂逅大数据,加速破解新常态下税收剪刀差
查看>>
从应用角度谈谈初创企业服务器采购建议与解决方案
查看>>
修改CPU 对抗计算机病毒
查看>>
8个方法让你成为更优秀的程序员
查看>>
城市之眼视觉计算技术
查看>>
bd:快速返回某级父目录而不用冗余地输入 “cd ../../..”
查看>>
Wi-FM:借调频无线电信号可大幅提高无线网速
查看>>
IT宕机,和力记易容灾备份能做什么
查看>>
FBI 可能找到了解锁 iPhone 的方法
查看>>
Android用Retrofit 2实现多文件上传实战
查看>>
《C语言课程设计》一1.1 VC 6.0简介
查看>>
警惕新Android木马 涉155个应用280万用户
查看>>
抢滩澳洲布局光伏储能大市场 协鑫集成在下一盘什么棋?
查看>>
思科董事长:法国将成为继美国、以色列、印度之后的另一个创业国度
查看>>
5年内在豫投资超30亿元 重点助力河南智慧城市运营
查看>>