网易首页 > 网易号 > 正文 申请入驻

程序员失业刚结婚,网友就劝离。。。

0
分享至

专栏:50多种数据结构彻底征服

专栏:50多种经典图论算法全部掌握

一网友说订婚的前两个月老公(结婚之前应该叫相亲对象)被裁了,结果继续筹备婚礼,婚也结了,最后还是没有找到工作,已经失业四个月了,现在也不敢要孩子。

我觉得如果是程序员,失业4个月还找不到工作,可以考虑先找一份工作过渡一下,实在不行就转行吧。34岁确实挺尴尬的一个年龄,虽然现在各互联网大厂一直在招人,并且给的工资也不低,但他们主要招的是应届毕业生。

至于网友说的换个对象,当做玩笑看看就行了,不要当真。人无千日好,花无百日红,每个人都会经历过事业的低谷,只要别一直在低谷躺着就行。





--------------下面是今天的算法题--------------

来看下今天的算法题,这题是LeetCode的第407题:接雨水 II

问题描述

来源:LeetCode第407题

难度:困难

很给你一个 m x n 的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。

示例1:



输入: heightMap = [[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3,2,3,1]] 输出: 4 解释: 下雨后,雨水将会被上图蓝色的方块中。总的接雨水量为1+2+1=4。

示例2:



输入: heightMap = [[3,3,3,3,3],[3,2,2,2,3],[3,2,1,2,3],[3,2,2,2,3],[3,3,3,3,3]] 输出: 10

  • m == heightMap.length

  • n == heightMap[i].length

  • 1 <= m, n <= 200

  • 0 <= heightMap[i][j] <= 2 * 10^4

问题分析

对于3D接雨水问题,首先边上的位置是不能盛水的,只有里面的才有可能盛水。我们把边上围成的一圈看成一个桶,如下图所示:


根据木桶原理, 桶中水的高度取决于最小的那块木板 ,所以我们可以计算和最短木板挨着的位置(上下左右四个方向)所能容纳的水量,如果该位置比最短木板还高,明显是不能盛水的,该位置只有低于木板的高度,才会盛水。

每个位置计算之后,为了方便每次查找最小值,我们可以把计算之后的位置添加到最小堆中,下一次就从堆中继续取出最小值,在计算它的上下左右四个方向。。。

如下图所示,我们看到桶的一周最矮的是 4 ,计算和它挨着的高度为 3 的位置,他可以盛一个单位的水,盛水之后他的高度就变成 4 了。然后和里面的 4 挨着的有 8 和 9 ,他们都比 4 大,所以他们是不能盛水的。

接着我们再取出最小值 8 ,和它挨着的 6 是可以盛水的,一直重复上面的步骤,直到所有点都计算完为止。


我们还可以这样来想一下,因为使用的是BFS的遍历方式,每次都是从堆中取最小值遍历它的上下左右四个方向,而堆中的元素都是遍历过的,所以所有计算过的位置都是连通的,从最外面一圈开始,逐渐往内计算,类似于农村包围城市,最终全部包围。

JAVA:

public int trapRainWater(int[][] heightMap) {     PriorityQueue

  pq = new PriorityQueue<>(Comparator.comparingInt((int[] a) -> a[2]));     int m = heightMap.length;// 矩阵的高     int n = heightMap[0].length;// 矩阵的宽     boolean[][] visited = new boolean[m][n];     // 先把四周所有元素添加到堆中。     for (int i = 0; i < m; ++i)         for (int j = 0; j < n; ++j)             if (i == 0 || i == m - 1 || j == 0 || j == n - 1) {                 pq.offer(new int[]{i, j, heightMap[i][j]});                 visited[i][j] = true;             }     int water = 0;// 接的雨水量     // 上下左右     int[][] dirs = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}};     while (!pq.isEmpty()) {         int[] nums = pq.poll();         for (int[] dir : dirs) {// 遍历当前出队元素的上下左右四个方向。             int x = nums[0] + dir[1];             int y = nums[1] + dir[0];             // 不能越界             if (y < 0 || y >= n || x < 0 || x >= m || visited[x][y])                 continue;             visited[x][y] = true;// 标记为已计算过             water += Math.max(0, nums[2] - heightMap[x][y]);// 计算水量             pq.add(new int[]{x, y, Math.max(nums[2], heightMap[x][y])});         }     }     return water; }

C++:

public:     int trapRainWater(vector

 > &heightMap) {         struct TupleCompare {             bool operator()(const tuple

  &a, const tuple

  &b) const {                 return get<2>(a) > get<2>(b);             }         };         priority_queue int,  int,  int>,  vector int,  int,  int>>, TupleCompare> pq; //  最小堆          int m = heightMap.size(); // 矩阵的高          int n = heightMap[ 0].size(); // 矩阵的宽          vector

 > visited(m, vector

 (n, false));          // 先把四周所有元素添加到堆中。          for ( int i =  0; i < m; ++i)              for ( int j =  0; j < n; ++j)                  if (i ==  0 || i == m -  1 || j ==  0 || j == n -  1) {                     pq.emplace(i, j, heightMap[i][j]);                     visited[i][j] =  true;                 }          int water =  0; // 接的雨水量          // 上下左右          int dirs[][ 2] = {{0,  -1},                          {0,  1},                          {-1, 0},                          {1,  0}};          while (!pq.empty()) {             tuple nums = pq.top();             pq.pop();              for ( const  auto &dir: dirs) { // 遍历当前出队元素的上下左右四个方向。                  int x = get< 1>(nums) + dir[ 0];                  int y = get< 0>(nums) + dir[ 1];                  // 不能越界                  if (x <  0 || x >= n || y <  0 || y >= m || visited[y][x])                      continue;                 visited[y][x] =  true; // 标记为已计算过                 water += max( 0, get< 2>(nums) - heightMap[y][x]); // 计算水量                 pq.emplace(y, x, max(get< 2>(nums), heightMap[y][x]));             }         }          return water;     }





Python:

def trapRainWater(self, heightMap: List[List[int]]) -> int:     pq = []     m = len(heightMap)  # 矩阵的高     n = len(heightMap[0])  # 矩阵的宽     visited = [[False for _ in range(n)] for _ in range(m)]     # 先把四周所有元素添加到堆中。     for i in range(m):         for j in range(n):             if i == 0 or i == m - 1 or j == 0 or j == n - 1:                 heapq.heappush(pq, (heightMap[i][j], i, j))                 visited[i][j] = True     water = 0  # 接的雨水量     # 上下左右     dirs = [[0, -1], [0, 1], [-1, 0], [1, 0]]     while pq:         n0, n1, n2 = heapq.heappop(pq)         for dx, dy in dirs:  # 遍历当前出队元素的上下左右四个方向。             x = n1 + dx             y = n2 + dy             # 不能越界             if x < 0 or x >= m or y < 0 or y >= n or visited[x][y]:                 continue             visited[x][y] = True  # 标记为已计算过             water += max(0, n0 - heightMap[x][y])  # 计算水量             heapq.heappush(pq, (max(n0, heightMap[x][y]), x, y))     return water

笔者简介

博哥,真名:王一博,毕业十多年, 作者,专注于 数据结构和算法 的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以 下载我整理的1000多页的PDF算法文档 。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
川马行空的时代,马斯克“霸王无人机”将改变整个世界的军事规则

川马行空的时代,马斯克“霸王无人机”将改变整个世界的军事规则

壹家言
2024-12-02 23:08:22
大兴机场被北漂睡成“洗浴中心”,撕开当下社会最体面的一幕

大兴机场被北漂睡成“洗浴中心”,撕开当下社会最体面的一幕

这班我上够了
2024-11-30 13:50:03
有一说一,赵继伟和郭艾伦根本不是一个级别的球员!

有一说一,赵继伟和郭艾伦根本不是一个级别的球员!

田先生篮球
2024-12-03 23:10:17
卷到西班牙!一个华人老板的加入,让小镇五家超市每周营业时间暴涨118小时

卷到西班牙!一个华人老板的加入,让小镇五家超市每周营业时间暴涨118小时

回旋镖
2024-11-23 23:42:21
好日子结束了!港府:健全失业者须无偿工作

好日子结束了!港府:健全失业者须无偿工作

港港地
2024-12-03 09:02:49
惜败!米勒34+3,乔治29+8累到喘气,纳斯谈恩比德,真该留下哈登

惜败!米勒34+3,乔治29+8累到喘气,纳斯谈恩比德,真该留下哈登

巴叔GO聊体育
2024-12-04 11:24:19
别再演了!丁勇岱《我是刑警》口碑崩塌,出场拽的如同二五八万

别再演了!丁勇岱《我是刑警》口碑崩塌,出场拽的如同二五八万

夏聊史
2024-12-03 11:55:51
著名音乐人病逝!出生于哈尔滨,曾创作多首脍炙人口的歌曲

著名音乐人病逝!出生于哈尔滨,曾创作多首脍炙人口的歌曲

新晚报
2024-12-04 07:43:21
人口出生率9‰的俄罗斯,禁止宣传不生孩子

人口出生率9‰的俄罗斯,禁止宣传不生孩子

安安小小姐姐
2024-12-03 06:48:00
39岁的C罗即将续约,至少踢到2026年,年薪或达3亿欧:沙特2年0冠

39岁的C罗即将续约,至少踢到2026年,年薪或达3亿欧:沙特2年0冠

风过乡
2024-12-04 08:20:27
演员靳东的身份引热议,登新闻联播,竟坐在了主桌,地位太不一般

演员靳东的身份引热议,登新闻联播,竟坐在了主桌,地位太不一般

秋姐居
2024-12-04 08:30:15
遗憾!机车网红万小橘离世,年仅19岁,惨烈现场曝光,家人已哭麻

遗憾!机车网红万小橘离世,年仅19岁,惨烈现场曝光,家人已哭麻

叶公子
2024-12-03 20:52:37
换电池价格将和修发动机持平?机构预测:动力电池成本有望在2026年降至百元

换电池价格将和修发动机持平?机构预测:动力电池成本有望在2026年降至百元

华夏时报
2024-12-03 23:33:02
15分钟轰6+6!快船要补强了,被哈登喂吐的中锋,终于要再次联手

15分钟轰6+6!快船要补强了,被哈登喂吐的中锋,终于要再次联手

巴叔GO聊体育
2024-12-03 16:59:41
王心凌这状态根本不像45岁的女人,这双白皙的大长腿美的不像话!

王心凌这状态根本不像45岁的女人,这双白皙的大长腿美的不像话!

人情皆文史
2024-11-04 00:41:18
还剩3天,立陶宛对华下逐客令,中方人员离境前,林剑送出一句话

还剩3天,立陶宛对华下逐客令,中方人员离境前,林剑送出一句话

史行途
2024-12-03 13:40:51
小米的核心技术是什么?评论区的答案把人笑喷了,但事实似乎如此

小米的核心技术是什么?评论区的答案把人笑喷了,但事实似乎如此

科技铭程1
2024-12-03 00:44:10
德外长第二次访华,中方没有出席联合记者会,只剩她一人“独白”

德外长第二次访华,中方没有出席联合记者会,只剩她一人“独白”

橘色数码
2024-12-03 21:12:44
主帅最能打!周鹏13中7砍全队最高20分外加6板4帽 正负值+15

主帅最能打!周鹏13中7砍全队最高20分外加6板4帽 正负值+15

直播吧
2024-12-03 21:54:26
网传安徽某地社区3个月未发工资,网友:不精兵简政难改当前囧境

网传安徽某地社区3个月未发工资,网友:不精兵简政难改当前囧境

火山诗话
2024-12-03 06:23:05
2024-12-04 12:16:49
数据结构和算法
数据结构和算法
专门介绍和写算法题解的号
137文章数 2关注度
往期回顾 全部

科技要闻

美国芯片慎用!中国四大行业协会发声

头条要闻

马斯克围观韩国6小时"戒严闹剧":太令人震惊

头条要闻

马斯克围观韩国6小时"戒严闹剧":太令人震惊

体育要闻

心里苦!凯恩退出本赛季第一项冠军争夺

娱乐要闻

李行亮商演官宣照被删除,疑似遭抵制

财经要闻

梁建章:建议对生孩子家庭发10万元

汽车要闻

表现够全能 柴油版二代哈弗H9或许更适合家用

态度原创

健康
亲子
游戏
手机
公开课

花18万治疗阿尔茨海默病,值不值?

亲子要闻

你有一种连你自己都没意识到的超能力

桌宠新作《你的老婆》特别好评:让好友知道你在玩什么

手机要闻

力压REDMI,iQOO成2000-4000元性价比之王

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版