程序员老鬼

劝退一个月薪35K,有房贷车贷有俩娃的40岁中年研发~

刚看到个贴子,说有个40岁中年程序员,月薪35K,有房贷车贷还有俩娃,被公司劝退了,HR都忍不住感慨。

Image

说实话,这种事儿在IT圈真不稀奇。程序员这个行当,年纪越大越难混,尤其大环境不行,公司更喜欢便宜好用的小年轻。

网友们的回复不少,有的同情,有的冷嘲热讽。但在我看来,35K对公司来说不算低,能顶俩刚毕业的。你再能干,只要项目没你离不开,就随时可能被优化。说到底,职场讲的是价值,不是资历,年纪大了没新东西,PPT做不过产品,管理又比不过老板,那就只能喝西北风了。

不过话说回来,这也给我们程序员提个醒,别光想着代码,得早做打算。时代变化快,大家还是要保持学习和危机感。【备注:文末可领最新资料】

算法题:检查「好数组」

有个小兄弟来问我,说他在写一道算法题——啥“好数组”,搞得他一脸懵,说看起来简单,写起来不放心。那会儿我还在啃面包,结果面包屑掉键盘上了...你说这题,挺有意思,我顺手扒拉一下,顺便给你们唠唠嗑,说不定你也遇到。

先说场景吧,昨天晚上快12点了,还在工位上,微信群突然有人甩个链接过来,就是那个什么LeetCode,好像叫“检查好数组”,我一开始以为啥花里胡哨的题,结果看了一眼,其实逻辑很朴实。大致意思是:给你一个整型数组,问你能不能通过某种“操作”把数组里所有元素变成1。什么操作?每次你可以任选两个数a和b,把其中一个替换成|a-b|,就反复搞。

讲真,一开始我以为是DP,后来想想,不对,这玩意其实跟最大公约数有关。你仔细一想,这种随便选俩数做“绝对值差”,其实就是在做“辗转相减”,是不是很像欧几里得算法?数学老师听了都笑了。最后,答案其实就一句话:只要数组的所有数的最大公约数(GCD)是1,那就能全变成1,否则你折腾半天,最后都只能停在gcd那个数上,永远下不去。

然后我说下写法吧,Java的话,没啥特别的,整两个方法搞定。昨天我正好在用Idea,手贱还开了个自动保存,边敲边聊,代码写出来就这样:

publicbooleanisGoodArray(int[] nums){
int gcd = nums[0];
for (int i = 1; i < nums.length; i++) {
        gcd = gcd(gcd, nums[i]);
if (gcd == 1) {
// 有1了不用算下去了
returntrue;
        }
    }
return gcd == 1;
}

privateintgcd(int a, int b){
while (b != 0) {
int t = a % b;
        a = b;
        b = t;
    }
return a;
}

就这样,没啥玄学。昨天我还跟小李吐槽,这题表面是操作,其实你动来动去本质就是gcd的“模拟人生”——你数组如果gcd不是1,怎么操作都只能停在那个值。你想搞出1?没门。

不过要注意,有时候数据全是负数也无所谓,绝对值搞一搞都一样,别让测试用例把自己绕进去。我是直接用for循环从头到尾把gcd求一遍,碰到1就可以偷懒直接return了。

-END-

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

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