当前位置:首页>java>学历真的太重要了,工作中一个博士同事,代码写的一坨屎,需求不了解就直接开搞,埋了很多坑,但是领导还是很看重..

学历真的太重要了,工作中一个博士同事,代码写的一坨屎,需求不了解就直接开搞,埋了很多坑,但是领导还是很看重..

  • 2026-10-22 20:32:38
学历真的太重要了,工作中一个博士同事,代码写的一坨屎,需求不了解就直接开搞,埋了很多坑,但是领导还是很看重..

刚看到个贴子,大意是:网友吐槽自己部门来了个博士同事,代码写得乱七八糟,业务一点不懂就直接上手,埋了一堆坑,效果一般般,却被领导当宝贝,人都麻了。

我觉得这事吧,先分开说。贴子说的是“学历光环压人”,这个确实存在,很多领导天然觉得博士=聪明=潜力股,哪怕短期产出一般,也愿意多给机会,顺便还能给团队撑门面。网友回帖我也看了,有的说“学历没用,全看能力”,有的说“没学历连被偏爱的机会都没有”。我比较认同后面那句——学历是硬通货,但真想在职场站稳脚跟,还是得落到“把活干好”上。

换个角度想,如果那个博士迟早会把能力和业务补起来,你现在就是在跟未来的强对手同场竞技。与其天天气得牙痒痒,不如研究下:领导到底在他身上看中了什么?自己能不能也补齐一块。

算法题:没有广告的剧集

我先说结论啊,这题其实就是一句话——在一堆有广告的时间段里面,把“空档”找出来,再挑一个最长的。听起来很生活,对吧。

你下班回家,点开一个 60 分钟的剧集,结果平台特别热情,给你塞了一堆广告:

  • 5 ~ 10 分钟一条
  • 20 ~ 30 分钟一条
  • 28 ~ 40 分钟还有一条(重叠了)
  • 50 ~ 55 分钟再来一条

你心里想的是:我就想找一段尽量长的、完全没有广告的时间,边吃饭边看,中间别被打断。

如果用算法的说法就是:

  • 总时长是 T 分钟(比如 60)
  • 有 n 段广告,每段是一个区间 [start, end)
  • 求:剧集里最长的一段“没有广告”的连续时间长度,顺便把这个区间的起止时间也算出来。

别被“算法题”这三个字吓到了,思路很接地气,就三步:

  1. 把所有广告时间段按开始时间排序
  2. 把重叠、相邻的广告段合并成“更大块”的广告区间
  3. 在这些广告区间之间找“空档”,空档就是没有广告的剧集时间

举个简单过程(还是刚才那几个广告):

原始广告:

  • [5,10]
  • [20,30]
  • [28,40]
  • [50,55]

第一步,按开始时间排序以后其实顺序不变。

第二步,合并重叠的广告段:

  • [20,30] 和 [28,40] 重叠了,合成一段 [20,40]

所以最后广告区间变成:

  • [5,10]
  • [20,40]
  • [50,55]

第三步,找这些广告之间的空档:

  • 开头到第一个广告之间: [0,5] → 长度 5
  • [5,10] 和 [20,40] 之间: [10,20] → 长度 10
  • [20,40] 和 [50,55] 之间: [40,50] → 长度 10
  • 最后一个广告到结尾: [55,60] → 长度 5

于是没广告的区间是:[0,5]、[10,20]、[40,50]、[55,60] 最长的是 10 分钟,有两个:[10,20] 和 [40,50],怎么取随你,可以取第一个出现的。

整个过程的成本:

  • 排序:O(n log n)
  • 合并 + 扫一遍找空档:O(n)
  • 总体:O(n log n),面试官一般会点头说可以。

来,上 PHP 代码,变量名写得尽量看一眼就懂的那种。

<?php/** * 计算剧集中最长的一段没有广告的时间 * * @param int $length 剧集总时长,例如 60(分钟 / 秒都行,只要统一单位) * @param array $ads  广告区间列表,每项是 [start, end],半开区间 [start, end) * @return array ['start' => int, 'end' => int, 'duration' => int] */functionmaxNoAdSegment(int $length, array $ads): array{// 没有任何广告,整集都是无广告if (empty($ads)) {return ['start'    => 0,'end'      => $length,'duration' => $length,        ];    }// 1. 按广告开始时间排序    usort($ads, function($a, $b){if ($a[0] === $b[0]) {return $a[1] <=> $b[1];        }return $a[0] <=> $b[0];    });// 2. 合并重叠或相邻的广告区间    $merged = [];    $current = $ads[0];for ($i = 1; $i < count($ads); $i++) {        $interval = $ads[$i];// 如果当前区间与前一个区间有重叠,或者首尾相接,就合并if ($interval[0] <= $current[1]) {// 结束时间取更大的那个            $current[1] = max($current[1], $interval[1]);        } else {// 不重叠,先把之前的放进结果里,再更新 current            $merged[] = $current;            $current = $interval;        }    }// 别忘了把最后一个也放进去    $merged[] = $current;// 3. 在这些广告区间之间找“空档”    $bestStart = 0;    $bestEnd = 0;    $bestDuration = 0;// 3.1 片头到第一个广告之间if ($merged[0][0] > 0) {        $duration = $merged[0][0] - 0;if ($duration > $bestDuration) {            $bestDuration = $duration;            $bestStart = 0;            $bestEnd = $merged[0][0];        }    }// 3.2 相邻广告之间的空档for ($i = 1; $i < count($merged); $i++) {        $prevEnd = $merged[$i - 1][1];        $curStart = $merged[$i][0];if ($curStart > $prevEnd) {            $duration = $curStart - $prevEnd;if ($duration > $bestDuration) {                $bestDuration = $duration;                $bestStart = $prevEnd;                $bestEnd = $curStart;            }        }    }// 3.3 最后一个广告到结尾之间    $lastEnd = $merged[count($merged) - 1][1];if ($lastEnd < $length) {        $duration = $length - $lastEnd;if ($duration > $bestDuration) {            $bestDuration = $duration;            $bestStart = $lastEnd;            $bestEnd = $length;        }    }// 如果广告把整集都盖住了,那就没有无广告时间了if ($bestDuration <= 0) {return ['start'    => 0,'end'      => 0,'duration' => 0,        ];    }return ['start'    => $bestStart,'end'      => $bestEnd,'duration' => $bestDuration,    ];}// 小测一下$length = 60;$ads = [    [5, 10],    [20, 30],    [28, 40],    [50, 55],];$result = maxNoAdSegment($length, $ads);var_dump($result);// 期望:start 10, end 20 或 start 40, end 50,duration 10

这段代码直接丢到本地 PHP 跑一跑就知道结果是不是你预期的了。

-END-

我为大家打造了一份RPA教程,完全免费:www.songshuhezi.com/rpa.html

🔥虎哥私藏精品🔥

虎哥作为一名老码农,整理了全网最全《最全项目实战源码及视频》。总量高达650GB

最新文章

随机文章