一亩三分地

 找回密码 注册账号

扫描二维码登录本站

最近看过此主题的会员


码农求职神器Triplebyte
不用海投
内推多家公司面试

Total Comp Calculator
输入offer信息
系统自动计算每年收入

科技公司如何
用数据分析驱动产品开发
coupon code 250off 立减$250

深入浅出AB Test
从入门到精通
coupon code 250off 立减$250
游戏初创公司招聘工程师、UIUX Designer和游戏策划
坐标湾区
DreamCraft创始团队
招聘游戏开发工程师
查看: 208|回复: 3
收起左侧

[树/链表/图] 778. Swim in Rising Water

[复制链接] |试试Instant~
我的人缘0

分享帖子到朋友圈
sean72kimo 发表于 2019-6-11 14:30:55 | 显示全部楼层 |阅读模式
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   85% (156)
 
 
14% (27)    👎

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
778. Swim in Rising Water
input grid = [[3,2],[0,1]]
expected 3
請問為什麼呢?
想用類似 the maze ii 的做法,如果隔壁格子水位較低,就一路往前走
出發位置在 (0,0), 高度為3, 比右邊和下面兩格都要高,不能一口氣直接游過去嗎?

Now rain starts to fall. At time t, the depth of the water everywhere is t <-- t時刻,每個格子的水量都是t ?
You can swim from a square to another 4-directionally adjacent square if and only if the elevation of both squares individually are at most t
這兩句關鍵的敘述看不太懂



补充内容 (2019-6-11 14:41):
之前做過the maze ii
我本以為 778這題和the maze ii BFS解法一樣
只要隔壁滿足某些條件,就可以一直往隔壁走

上一篇:今天刷题效果显著,把leetcode刷崩了 嘿嘿
下一篇:求问有没有针对LeetCode题目进行讲解的视频?
我的人缘0
zjck1995 发表于 2019-6-11 23:08:34 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (46)
 
 
0% (0)    👎
一开始水位是0,水位每秒增加一,grid可以看做一座山,不同地方海拔不同,只有当水位没过山的海拔时,才可以游泳。
由于游泳速度无限大,该问题转化为寻找从起点到终点的一条路径,使得路径上的最大海拔最小。
方法1: 将海拔从小到大排序,使用并查集连接,直到起点和终点相连
方法2:二分路径上的最大海拔x,构建原图海拔<=x的子图,使用dfs从起点出发,看是否能到达终点
回复

使用道具 举报

我的人缘0
kainJLDE 发表于 2019-6-11 23:44:24 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   0% (0)
 
 
0% (0)    👎
也可以用Dijkstra(Best first search), 维持一个priorityQueue, priority是时间,每次从pq poll出时间最少的那个格子,直到poll出右下角。
每次add格子的rule是Math.max(grid[x][y], previousTime),原因是:1>如果grid[x][y]比之前加起来时间都大,那么等雨下grid[x][y]这么久再游到x y,2>如果grid[x][y]比之前需要时间少,那么使用之前的时间即可
[Java] 纯文本查看 复制代码
class Solution {
    public int swimInWater(int[][] grid) {
        if (grid == null || grid.length == 0 || grid[0].length == 0) {
            return 0;
        }
        int n = grid.length;
        boolean[][] visited = new boolean[n][n];
        return bfs2(grid, visited);
    }
    private final int[][] dirs = {{1,0}, {-1,0}, {0,1}, {0,-1}};
    private int bfs2(int[][] grid, boolean[][] visited) {
        Queue<int[]> minHeap = new PriorityQueue<>(new Comparator<int[]>() {
           @Override
            public int compare(int[] i1, int[] i2) {
                return i1[2] - i2[2];
            }
        });
        minHeap.offer(new int[]{0, 0, grid[0][0]});
        visited[0][0] = true;
        int n = grid.length;
        while (!minHeap.isEmpty()) {
            int[] cur = minHeap.poll();
            if (cur[0] == n - 1 && cur[1] == n - 1) {
                return cur[2];
            }
            for (int[] dir : dirs) {
                int x = cur[0] + dir[0];
                int y = cur[1] + dir[1];
                if (x < 0 || x >= n || y < 0 || y >= n || visited[x][y]) {
                    continue;
                }
                minHeap.offer(new int[]{x, y, Math.max(grid[x][y], cur[2])});
                visited[x][y] = true;
            }
        }
        return 0;
    }
}
回复

使用道具 举报

我的人缘0
337845818 发表于 2019-6-12 22:45:53 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   75% (237)
 
 
24% (78)    👎
On an N x N grid, each square grid[i][j] represents the elevation at that point (i,j).
在N×N网格上,每个方格[i] [j]表示该点(i,j)处的高。

Now rain starts to fall. At time t, the depth of the water everywhere is t.
现在下雨开始下降。 在时间t,到处都是水的深度t。

You can swim from a square to another 4-directionally adjacent square if and only if the elevation of both squares individually are at most t
当且仅当两个方格的高度分别最多为t时,您才能从一个正方形游到另一个四向相邻的正方形

You can swim infinite distance in zero time. Of course, you must stay within the boundaries of the grid during your swim.
你可以在零时间内游泳无限远。 当然,游泳期间必须保持在网格范围内。

You start at the top left square (0, 0). What is the least time until you can reach the bottom right square (N-1, N-1)?
你从左上角的方块(0,0)开始。 到达右下方(N-1,N-1)的最短时间是多少?

我很好奇很多人到底是英文不好不能理解呢, 还是题根本读也不读就开始闭着眼睛做了.
回复

使用道具 举报

游客
请先登录
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法 - 不要多加空格: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版|小黑屋|一亩三分地

GMT+8, 2019-7-19 03:10

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表