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

35岁程序员脑干出血,可能要一辈子做康复。。

0
分享至

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

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

最近浙江杭州一位35岁程序员因长期熬夜,导致脑干出血,昏迷了15天,经过紧急治疗后,他在接受媒体采访时说:自己每天早上 7 点起床,到凌晨一两点睡。

这简直是拿生命当儿戏,说实话凌晨一两点睡,20多岁的时候我也遇到过,不过一年也不会超过5次,如果真的睡那么晚,第二天基本上要9点之后起床了。35岁之后就更不能这样搞了,长期下去早晚有出事。

当事人称自己在ICU一共待了28天,后来又去康复医院待了70多天,回家之后也一直在康复和锻炼,现在已经恢复了大约70%,但可能没有办法完全康复了。

他还说:“现在的我看待生活,觉得让自己开心很重要,活得自由一点。之前想着我要挣钱,会在很多方面压制自己,现在的话我觉得更多的可能要去好好体验生活,让自己过得快乐。也希望大家如果觉得累了,就歇一歇,我是前车之鉴。”




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

来看下今天的算法题,这题是LeetCode的第1483题:树节点的第 K 个祖先,难度是困难。

给你一棵树,树上有 n 个节点,按从 0 到 n-1 编号。树以父节点数组的形式给出,其中 parent[i] 是节点 i 的父节点。树的根节点是编号为 0 的节点。树节点的第 k 个祖先节点是从该节点到根节点路径上的第 k 个节点。

实现 TreeAncestor 类:

1,TreeAncestor(int n, int[] parent) 对树和父数组中的节点数初始化对象。

2,getKthAncestor(int node, int k) 返回节点 node 的第 k 个祖先节点。如果不存在这样的祖先节点,返回 -1 。

示例1:



输入: ["TreeAncestor","getKthAncestor","getKthAncestor","getKthAncestor"] [[7,[-1,0,0,1,1,2,2]],[3,1],[5,2],[6,3]] 输出: [null,1,0,-1]

解释: TreeAncestor treeAncestor = new TreeAncestor(7, [-1, 0, 0, 1, 1, 2, 2]); treeAncestor.getKthAncestor(3, 1); // 返回 1 ,它是 3 的父节点 treeAncestor.getKthAncestor(5, 2); // 返回 0 ,它是 5 的祖父节点 treeAncestor.getKthAncestor(6, 3); // 返回 -1 因为不存在满足要求的祖先节点

  • 1 <= k <= n <= 5 * 10^4

  • parent[0] == -1 表示编号为 0 的节点是根节点。

  • 对于所有的 0 < i < n ,0 <= parent[i] < n 总成立

  • 0 <= node < n

  • 至多查询 5 * 10^4 次

问题分析

这题让返回某个节点的第 k 个祖先节点,并且查询次数高达 5 * 10^4 ,如果每次查询的时候都要重新找,肯定是不行的。因为这题没有对树修改的函数,所以这棵树是固定的,我们可以先计算所有节点的第 x 个祖先节点,查询的时候就会更加方便。

我们这里使用倍增的思想,定义数组dp[i][j]表示节点 i 的第 2^j 个祖先。很明显当 j 等于 0 的时候,dp[i][0]表示的是节点 i 的父节点。

找到每个节点的父节点了,那么肯定也能找到每个节点父节点的父节点,也就是dp[i][1]=dp[dp[i][0]][0],也就是说节点 i 的第 2^1 个祖先是节点 i 的第 2^0 个祖先的第 2^0 个祖先。

更进一步我们可以得出节点 i 的第 2^j 个祖先是节点 i 的第 2^(j-1) 个祖先的第 2^(j-1) 个祖先。举个例子,节点 i 的第 8 个祖先节点是它的第 4 个祖先节点的第 4 个祖先节点。

所以我们可以得到:dp[i][j]=dp[dp[i][j-1]][j-1],但这样计算的结果是不完整的,比如计算 i 的第 13 个祖先节点,我们可能最多只能计算它的第 8 个祖先节点,但这不影响查询。

在进行查询的时候我们是根据这个数字的二进制进行查询的。比如 13 的二进制是 1101,我们只需要往上先查询 i 的第 1 个,然后第 4 个,最后第 8 个,最终结果就是 i 的第 13 个祖先节点。

JAVA:

class TreeAncestor {     int bits;// n 的最大位数     // dp[i][j] 表示节点 i 的第 2^j 个祖先     int[][] dp;     public TreeAncestor(int n, int[] parent) {         bits = (int) (Math.log(n) / Math.log(2)) + 1;         dp = newint[n][bits];         for (int i = 0; i < n; i++)             Arrays.fill(dp[i], -1);// 全部默认为 -1 。         // 所有节点的第一个祖先是它的父节点。         for (int i = 0; i < n; i++)             dp[i][0] = parent[i];         // 节点 i 的第 2^j 个祖先也是节点 i 的第2^(j-1)个祖先的第2^(j-1)个祖先。         for (int j = 1; j < bits; j++) {             for (int i = 0; i < n; i++) {                 // i 的第2^(j-1)个祖先就是dp[i][j - 1]。                 if (dp[i][j - 1] != -1) dp[i][j] = dp[dp[i][j - 1]][j - 1];             }         }     }     // 利用二进制的特性使用倍增查询。     public int getKthAncestor(int node, int k) {         for (int j = 0; j < bits; j++) {             // 比如 k 是13,它的二进制是1101,只有二进制中是 1 的时候才需要查询,             // 先往上查 1 个,在往上查 4 个,最后在往上查 8 个,正好查找第 13 个。             if (((k >> j) & 1) == 1) {                 // 从node开始往上查询第 2^j 个。                 node = dp[node][j];                 if (node == -1)// 如果为 -1 ,说明不存在第 k 个祖先。                     return -1;             }         }         return node;     } }

C++:

class TreeAncestor { private:     int bits; // n 的最大位数     vector

 > dp; // dp[i][j] 表示节点 i 的第 2^j 个祖先 public:     TreeAncestor(int n, vector

 &parent) {         bits = (int) (log(n) / log(2)) + 1;         dp = vector

 >(n, vector

 (bits, -1)); // 初始化为 -1         // 所有节点的第一个祖先是它的父节点。         for (int i = 0; i < n; i++)             dp[i][0] = parent[i];         // 节点 i 的第 2^j 个祖先也是节点 i 的第2^(j-1)个祖先的第2^(j-1)个祖先。         for (int j = 1; j < bits; j++) {             for (int i = 0; i < n; i++) {                 // i 的第2^(j-1)个祖先就是dp[i][j - 1]。                 if (dp[i][j - 1] != -1)                     dp[i][j] = dp[dp[i][j - 1]][j - 1];             }         }     }     // 利用二进制的特性使用倍增查询。     int getKthAncestor(int node, int k) {         for (int j = 0; j < bits; j++) {             // 比如 k 是13,它的二进制是1101,只有二进制中是 1 的时候才需要查询,             // 先往上查 1 个,在往上查 4 个,最后在往上查 8 个,正好查找第 13 个。             if (((k >> j) & 1) == 1) {                 // 从node开始往上查询第 2^j 个。                 node = dp[node][j];                 if (node == -1)// 如果为 -1 ,说明不存在第 k 个祖先。                     return-1;             }         }         return node;     } };




笔者简介

博哥,真名:王一博,毕业十多年, 作者,专注于 数据结构和算法 的讲解,在全球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.

相关推荐
热点推荐
最新 | 天津市政府公告!9月20日响彻全市!

最新 | 天津市政府公告!9月20日响彻全市!

天津广播
2025-09-15 09:35:42
南沙二手房跌 48.3%,增城跌 55.2%,广州外围区房价还没触底?

南沙二手房跌 48.3%,增城跌 55.2%,广州外围区房价还没触底?

爱看剧的阿峰
2025-09-15 17:04:45
杨振宁亲人揭露翁帆真面目!翁帆不再隐瞒,说出和杨振宁结婚原因

杨振宁亲人揭露翁帆真面目!翁帆不再隐瞒,说出和杨振宁结婚原因

阿讯说天下
2025-08-21 12:36:18
晚清一奇才借钱从不花,放箱子里到期便还,用此套路攒下亿万身家

晚清一奇才借钱从不花,放箱子里到期便还,用此套路攒下亿万身家

风云史迹
2025-09-13 15:42:55
美国没想到,俄罗斯也没想到,如今的中国,已经成为世界骄傲

美国没想到,俄罗斯也没想到,如今的中国,已经成为世界骄傲

冬天来旅游
2025-09-15 16:03:49
港府强收公屋酿悲剧!母子双双跳楼亡...

港府强收公屋酿悲剧!母子双双跳楼亡...

港港地
2025-09-15 13:01:44
足球报:梅州客家深陷经济危机,招商情况不佳、收入杯水车薪

足球报:梅州客家深陷经济危机,招商情况不佳、收入杯水车薪

懂球帝
2025-09-15 11:35:12
多国宣布:出动战机!

多国宣布:出动战机!

环球时报国际
2025-09-14 10:15:04
善恶终有报!于朦胧事件后 程青松“底裤”被扒光 不少男星遭过殃

善恶终有报!于朦胧事件后 程青松“底裤”被扒光 不少男星遭过殃

小兰聊历史
2025-09-15 18:05:25
邓婕近况:离婚协议留给她无尽伤痛,继子未成器,养女渐似亡夫模样

邓婕近况:离婚协议留给她无尽伤痛,继子未成器,养女渐似亡夫模样

情感大头说说
2025-09-15 14:19:02
迷雾重重!人民法治突发通报:北京警方已介入调查于朦胧坠楼事件

迷雾重重!人民法治突发通报:北京警方已介入调查于朦胧坠楼事件

明月杂谈
2025-09-15 04:45:13
包养情人无数,娶初中同学女儿为妻,玩老婆闺蜜,嗜色如命的富豪

包养情人无数,娶初中同学女儿为妻,玩老婆闺蜜,嗜色如命的富豪

负面黑洞
2025-09-11 16:19:05
好消息,湖南暂时确定2026年新农合缴费标准,具体多少?来看看

好消息,湖南暂时确定2026年新农合缴费标准,具体多少?来看看

甜柠聊史
2025-09-15 15:34:38
再见澳门!国乒回京楚钦莎莎不避嫌与王皓交流,王楚钦发四个我们

再见澳门!国乒回京楚钦莎莎不避嫌与王皓交流,王楚钦发四个我们

巷子里的历史
2025-09-15 17:20:39
繁华过后,欧洲迎来列强的瓜分!

繁华过后,欧洲迎来列强的瓜分!

娱乐喵喵说
2025-09-14 18:14:04
辽宁男篮放大招了!新首发阵容一出,其他队还怎么玩?

辽宁男篮放大招了!新首发阵容一出,其他队还怎么玩?

野渡舟山人
2025-09-15 15:51:07
罗永浩称华与华老板已道歉,但西贝贾老板道歉也来不及了

罗永浩称华与华老板已道歉,但西贝贾老板道歉也来不及了

潇湘晨报
2025-09-15 13:57:43
罗永浩回应西贝道歉信

罗永浩回应西贝道歉信

第一财经资讯
2025-09-15 14:10:40
确认!油价将调整

确认!油价将调整

大象新闻
2025-09-15 11:03:03
被央视怒批、摇头晃脑、德不配位,难怪阅兵从不邀请“流量”明星

被央视怒批、摇头晃脑、德不配位,难怪阅兵从不邀请“流量”明星

书雁飞史oh
2025-09-12 16:09:35
2025-09-15 20:56:49
数据结构和算法
数据结构和算法
专门介绍和写算法题解的号
244文章数 3关注度
往期回顾 全部

科技要闻

官方:英伟达违反反垄断法 将施进一步调查

头条要闻

"小电驴"新国标落地两周 新旧车都在涨价

头条要闻

"小电驴"新国标落地两周 新旧车都在涨价

体育要闻

诺维茨基退役十年后,德国篮球走向巅峰

娱乐要闻

60岁张曼玉定居法国:瘦成皮包骨?

财经要闻

华与华秒怂 罗永浩称已接到对方道歉

汽车要闻

后轮转向和5C 2026款梦想家把想到的都给了

态度原创

亲子
旅游
数码
本地
公开课

亲子要闻

宝蓝清早唱洗漱歌

旅游要闻

热闻|清明假期将至,热门目的地有哪些?

数码要闻

美光先发优势遭重挫!NVIDIA叫停首代SOCAMM内存开发:转向SOCAMM2

本地新闻

云游中国 | 草原驭秋风 祁连山邂逅黑河源头

公开课

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

无障碍浏览 进入关怀版