博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pacific-atlantic-water-flow(不错)
阅读量:5887 次
发布时间:2019-06-19

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

https://leetcode.com/problems/pacific-atlantic-water-flow/// 其实,这道题目可以参考前面的那道:Trapping Rain Water II  // 可以看我blog上面的解法:// http://www.cnblogs.com/charlesblc/p/5920258.html// 注意Java set的操作,retainAll 交集,removeAll差集// 开始set里面放的是int[],但是发现比较的时候,都被认为不一样,所以需要换成Block// 第一次提交还报了一个Runtime Error,因为没有考虑row或者column为0的情况public class Solution {    private class Block {        public int row;        public int col;        public int height;        public Block(int r, int c, int h) {            row = r;            col = c;            height = h;        }        public int hashCode() {            return row + col + height;        }        public boolean equals(Object obj) {            if (obj instanceof Block) {                Block bk = (Block)obj;                return bk.row == row && bk.col == col;            }            return false;        }    }    public List
pacificAtlantic(int[][] matrix) { List
ret = new ArrayList
(); int r = matrix.length; if (r == 0) { return ret; } int c = matrix[0].length; if (c == 0) { return ret; } Set
pSt = new HashSet
(); Set
aSt = new HashSet
(); Queue
qe = new PriorityQueue
(1, new Comparator
() { @Override public int compare(Block o1, Block o2) { return o1.height - o2.height; } } ); boolean[][] visited = new boolean[r][c]; int[][] dirs = { {-1,0}, {0, 1}, {1, 0}, {0, -1}}; for (int i=0; i
= r || nc < 0 || nc >= c || visited[nr][nc]) { continue; } visited[nr][nc] = true; if (matrix[nr][nc] >= bk.height) { Block nbk = new Block(nr, nc, matrix[nr][nc]); pSt.add(nbk); //System.out.printf("add pset new: %d, %d\n", tmp[0], tmp[1]); qe.offer(nbk); } } } // 重新初始化,计算atlantic qe.clear(); visited = new boolean[r][c]; for (int i=0; i
= r || nc < 0 || nc >= c || visited[nr][nc]) { continue; } visited[nr][nc] = true; if (matrix[nr][nc] >= bk.height) { Block nbk = new Block(nr, nc, matrix[nr][nc]); aSt.add(nbk); //System.out.printf("add aset new: %d, %d\n", tmp[0], tmp[1]); qe.offer(nbk); } } } //System.out.printf("pset length: %d\n", pSt.size()); //System.out.printf("aset length: %d\n", aSt.size()); pSt.retainAll(aSt); System.out.printf("set length: %d\n", pSt.size()); Iterator itr = pSt.iterator(); while (itr.hasNext()) { Block bk = (Block)itr.next(); int[] val = {bk.row, bk.col}; ret.add(val); } return ret; }}

 

你可能感兴趣的文章
如何在ashx页面获取Session值 (仅供个人参考)
查看>>
cookie与session
查看>>
Linux经常用到的命令以及快捷键
查看>>
计算题:挣值、预测、沟通、盈亏平衡点、
查看>>
ios一个自定义的下拉多选菜单
查看>>
存在性问题
查看>>
js 实现 aop
查看>>
AES加密在windows与linux平台下显示结果不同,解决方案
查看>>
别让持续交付自动化交付bug
查看>>
LOJ2586 APIO2018 选圆圈
查看>>
Dalvik VM和JVM的比较以及Android新的虚拟机ART
查看>>
【CSU 1803】2016
查看>>
SQLServer 批量备份与还原
查看>>
51Nod 1010 只包含因子2 3 5的数 Label:None
查看>>
Java中String和byte[]间的转换浅析
查看>>
辞职信也要玩出高big
查看>>
什么是异步
查看>>
WordPress 主题切换
查看>>
cookie和session
查看>>
【java】path和classpath
查看>>