程序员老鬼

被裁员后拿了 80000补偿金,交接完就离开了公司,结果新同事误删了资料,老总要这位同事回来交接,否则全行业抹黑他。

刚看到个贴子,说有程序员被裁员拿了8万补偿,交接完拍拍屁股走人,结果新来的把资料全删了,老板非要他回来补交接,还威胁说要全行业抹黑他。我觉得这事吧,真的是既无语又有点好笑😂。

Image

网友们的回复我看了,有说支持老同事的,也有说他太绝情。可站在程序员角度,交接流程清清楚楚,资料安全本来就是公司该负责的,新人把锅甩回来,纯属甩锅王。老板威胁“行业抹黑”,其实就跟代码没备份怪老工程师一样,挺离谱的。程序员最怕的就是背锅,走到哪都要背风险,那大家以后是不是都得随时待命?这和“劳动合同”精神完全背道而驰。

总的来说,干程序这行就是流程正义最重要,该交的交清楚,剩下的别背莫名其妙的黑锅。【备注:文末可领最新资料】

算法题:街上最亮的位置

小王就在公司楼下等车那会儿,他突然问我一个LeetCode上的算法,说什么“街上最亮的位置”,这不我手头刚好有个纸巾擦手机,我就随手给他画了个思路。真的,这题,第一次看还真愣了一下,后面一想,哎不就是区间加值+查最大值那种老套路么。

你想啊,现在路灯布在一条直线上,然后每个灯都能照亮自己左边r[i]个位置和右边r[i]个位置,比如灯在i,那它能管的就是[i - r[i], i + r[i]],你明白吧?然后问你整个街上哪个位置被最多的灯照亮了,返回那个最大照明次数就行了。

当时我就跟他说,我说你别一上来就暴力遍历,啥都往数组里挨个加,N*N直接超时。其实这套路,前两年我跟组里老李讲过一次,还是得用“差分数组”来搞,不然性能拉胯。

差分技巧,别老忘

简单说一下啊,就是你把每个灯的照明范围,都在区间起点+1,区间终点+1那个地方-1,然后一波前缀和扫一遍,最后每个点累加起来不就知道每个点被几个灯照了吗?就有点像咱们分批涨工资,只记录开始涨和停止涨的点,后面自动计算。

我那天正好还在公司茶水间碰见隔壁组搞大数据的哥们,他也说这个思路好用,啥场景都能套,区间加法效率直接起飞。

代码给你看看(Java实现)

随便撸个代码哈,你们别太介意变量名乱七八糟的,我每次都是写到哪算到哪。

publicintbrightestPosition(int[] lights, int[] radius){
// 假设lights的值不会太大,不然就得动态哈希表了
int n = lights.length;
// 找一下最大最小位置,省得开太大数组
int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
for (int i = 0; i < n; i++) {
        min = Math.min(min, lights[i] - radius[i]);
        max = Math.max(max, lights[i] + radius[i]);
    }
// 差分数组长度
int len = max - min + 3;
int[] diff = newint[len];
for (int i = 0; i < n; i++) {
int l = lights[i] - radius[i] - min;
int r = lights[i] + radius[i] - min;
        diff[l] += 1;
        diff[r + 1] -= 1;
    }
// 求最大照明数
int maxLight = 0, curr = 0;
for (int i = 0; i < len; i++) {
        curr += diff[i];
        maxLight = Math.max(maxLight, curr);
    }
return maxLight;
}

说到这,有人肯定要问了,这种写法到底能不能应付面试官的追问?你放心,这种差分+前缀和,基础扎实点的面试官肯定不会为难你,最多让你扩展一下,比如返回所有“最亮的位置”有哪些,甚至是让你自己写一下具体下标返回啥的,稍微变形一下就行。

反正你记住,这种带区间更新的问题,别死磕暴力模拟,基本都能用差分优化一下。就像我昨晚回家路上,那个街口全是积水,要是每个人都用盆舀水,明天都还下不完。得用大水泵一波一波的抽,那效率才叫高。

再补一句,如果lights数据有负数位置,或者不是连续的,也别慌,记得用偏移量搞成数组下标,别傻乎乎直接lights[i]做数组下标,越界了可没人帮你兜底哈。

-END-

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

最后给大家分享一份不错的副业资料,点击下方公众号,回复关键字: 副业 领取,也可以链接我领取,微信:hls404