算法
给你一个下标从 1 开始的二进制矩阵,其中 0 表示陆地,1 表示水域。同时给你 row 和 col 分别表示矩阵中行和列的数目。
一开始在第 0 天,整个 矩阵都是 陆地 。但每一天都会有一块新陆地被 水 淹没变成水域。给你一个下标从 1 开始的二维数组 cells ,其中 cells[i] = [ri, ci] 表示在第 i 天,第 ri 行 ci 列(下标都是从 1 开始)的陆地会变成 水域 (也就是 0 变成 1 )。
你想知道从矩阵最 上面 一行走到最 下面 一行,且只经过陆地格子的 最后一天 是哪一天。你可以从最上面一行的 任意 格子出发,到达最下面一行的 任意 格子。你只能沿着 四个 基本方向移动(也就是上下左右)。
请返回只经过陆地格子能从最 上面 一行走到最 下面 一行的 最后一天 。
示例 1:

输入:row = 2, col = 2, cells = [[1,1],[2,1],[1,2],[2,2]]
输出:2
解释:上图描述了矩阵从第 0 天开始是如何变化的。
可以从最上面一行到最下面一行的最后一天是第 2 天。
示例 2:

输入:row = 2, col = 2, cells = [[1,1],[1,2],[2,1],[2,2]]
输出:1
解释:上图描述了矩阵从第 0 天开始是如何变化的。
可以从最上面一行到最下面一行的最后一天是第 1 天。
示例 3:

输入:row = 3, col = 3, cells = [[1,2],[2,1],[3,3],[2,2],[1,1],[1,3],[2,3],[3,2],[3,1]]
输出:3
解释:上图描述了矩阵从第 0 天开始是如何变化的。
可以从最上面一行到最下面一行的最后一天是第 3 天。
提示:
2 <= row, col <= 2 * 1044 <= row * col <= 2 * 104cells.length == row * col1 <= ri <= row1 <= ci <= colcells中的所有格子坐标都是 唯一 的。
java
class Solution {
private static final int[][] dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
public int latestDayToCross(int row, int col, int[][] cells) {
int left = 0, right = row * col, ans = 0;
while (left <= right) {
int mid = (left + right) / 2;
int[][] grid = new int[row][col];
for (int i = 0; i < row; i++) {
Arrays.fill(grid[i], 1);
}
for (int i = 0; i < mid; i++) {
grid[cells[i][0] - 1][cells[i][1] - 1] = 0;
}
Queue<int[]> q = new LinkedList<>();
for (int i = 0; i < col; i++) {
if (grid[0][i] == 1) {
q.offer(new int[]{0, i});
grid[0][i] = 0;
}
}
boolean found = false;
while (!q.isEmpty()) {
int[] cell = q.poll();
int x = cell[0], y = cell[1];
for (int[] dir : dirs) {
int nx = x + dir[0];
int ny = y + dir[1];
if (nx >= 0 && nx < row && ny >= 0 && ny < col && grid[nx][ny] == 1) {
if (nx == row - 1) {
found = true;
break;
}
q.offer(new int[]{nx, ny});
grid[nx][ny] = 0;
}
}
if (found) {
break;
}
}
if (found) {
ans = mid;
left = mid + 1;
} else {
right = mid - 1;
}
}
return ans;
}
}
二分法+广度优先搜索

今年总结
对的,没错,我还在继续更新着我的博客
不过和往年以及今年上半年不同的是
现在的我,盘坐在床上,喝着茶百道,身旁是一个ipad,ipad上显示和豆包的语音通话,床边是一个龟缸,龟缸里一只长达9cm的草龟正在做着瑜伽哈哈哈

回望今年
发生的事情之多不亚于以往的每一年
今年1月,爱上了一颗草莓

今年2月,穿着一身粉色的睡衣,爬树登高望远,企图将这中华大地尽收于眼底

今年3月,在学校......



今年4月,还是在学校,不过遇到了猫学长~



好多好可爱好粘人~此时的我还不知道,再过几个月,会有人直接把一辆大大大猫塞进我的怀里~
今年5月,和一起写项目的小伙伴去爬嵩山啦~




此时的我还不知道,再过个几个月,我会为了拍出更漂亮的照片而买一个max pro手机
今年6月份,毕业回家啦~


戴上不同颜色的路障我就变成了魔法师~
6月下旬,去杭州啦~
杭州动物园里的动物感觉都小小的~
但是看到了心心念念的大熊猫!


此时的我还不知道,再过个几个月,我会养一只宠物~
又去爬了宝石山,在这里可以看到西湖全景!
但是山顶有些危险!但是没关系,我是超人,我会飞!


今年7月份,又去进行了环西湖徒步!

该说不说,晴西湖和雨西湖都让我给遇到了
这一碗猪肚,要七十多!我的小钱钱!




今年8月份,去了青山湖水上森林,体验了一把水上划船的快乐!




等我回去一看,我直接黑了好几个度!!!
今年9月份,又去了飞来峰,与身处不同时代的王安石一起感受相同的山



9月24日,前往云栖小镇,听讲座
get了好多小玩意儿!
还体验了一把机器人按摩,也没人告诉我体验这个一上来就要扒裤子啊!!!
国庆节回家啦!!!
我的小宠物也到家啦!!!拆箱,哇!!!可爱死了!!!!!

这家伙是想可爱噶我好继承我的笑点吗!!!


国庆到了公司,我的迷雾键盘到啦!!!


两个星期后,我的小宠物嘎了
我一直觉得它是被我吓死的,后来听别人说,可能是买到了病蛇,我......
心情难受的我,去同事家撸猫


从来没见到过这么大的猫,不,这是一辆猫,同时咔的一下子,把猫塞我怀里
我跟抱着个小孩似的,紧张坏了
布偶猫怎么能这么漂亮
又过了一个周,我心情还是有些郁闷,于是买了个小米17pro max顶配版
请开始你的表演吧哇哈哈哈哈
放大50倍依然清晰!!!

虎跑公园的这棵树真美啊

玉皇山也是挺不错的


这也算是达成不同角度看西湖的成就了吗~
11月份,又去了植物园,挺不错的,只是人太多了



又去了我心心念念的爬宠体验馆
好大的金直间

好大的蓝舌

好漂亮的糖果

我爱它们

又去了西溪湿地,真美啊,徒步散心的好去处

有幸拍到了夕阳

有幸拍到了飞机



我爱这个世界
虽然我总是很倒霉,可能是和我老是算命有关吧
中旬,迟到了西湖醋鱼,挺好吃的

又去了西湖游船,挺不错的,这个角度的西湖美到爆炸,照片根本拍不出来眼睛看到的那种震撼感

又去体验了一把凌晨两点的西湖,人好少好少,还有大爷在湖里捞垃圾
凌晨的杭州,路上的行人与车辆也很少很少,体验了一把炸街的快乐
怪不得别人都喜欢凌晨开着车去炸街
12月中旬,这个时候天气已经有些冷了
去象山美院玩了一把,又去铜鉴湖走了一圈,美到爆炸


怪不得古人会这么喜欢喝茶赏景,换我我直接原地爆炸


还有良渚,挺不错的




明天就是元旦了,元旦也要出去玩!!!
登高望远!锻炼身体!!!
回望今年,去了好多地方,杭州玩了个遍
原本计划元旦去舟山的,但是天气不合适,没事,咱只能去爬山了
该说不说,下班年是参杂着泪水的,第一次正式工作,我才发现,我的进步空间还很大
真正的步入社会,才发现,不是每一个人都是好人,人们总是很自私的
唯有自身的强大才是真正的强大
持续学习,完善自我,很重要
接下来的一年里,我将全力推进各个方面的学习!!!
加油!!!