程序员老鬼

同事工资 2.3w,外企苟了8年,今年 35岁,本来准备被裁开始面试,结果一直裁不到,最近拿了阿里 offer涨薪 30%

刚刷到个贴子,说有网友在外企苟了8年,工资2.3w,今年35岁本来准备被裁,结果一直裁不到,最近还拿了阿里offer直接涨薪30%。作为程序员,这种事我见多了。外企稳定,但成长慢,环境好也容易让人失去危机感;但只要核心技能没丢,临到关键节点,市场永远会给你机会。

Image

网友评论不少有人说“命好”,也有人酸说“内卷没用”。我觉得吧,程序员这行说到底,就是个性价比游戏,你能为公司创造多少价值,公司自然愿意开高薪。能被裁到最后,其实是能力被默默认可了。 不过话说回来,别羡慕一时的涨薪,保持学习和输出才是底气。职场就像代码,冗余的总要被清理,核心的才会留下。 总结一句,保持核心竞争力,风口总有你的位置。【备注:文末可领最新资料】

算法题:找到数组的中间位置

我跟你说啊,就前天晚上下班路上,我在地铁上拿手机刷LeetCode,正好刷到这题。边上坐着一个小伙子还在背八股文,嘴里念叨“数组、下标、长度”,听得我脑袋瓜嗡嗡的。其实这个题说白了,意思就是找一个下标,让它左边所有数的和,等于右边所有数的和。如果有多个,找最左边的那个。如果一个都没有,就老老实实返回-1。就这么回事儿。

有时候想想,这种题其实就是考你细心,别一激动,for循环写顺手了结果死循环——我刚入行那会真写崩过好几次。其实用Java写也没啥难度,正常来说,先算一遍数组的总和,存个变量里,叫totalSum。然后再来一遍遍历,用个变量leftSum记录左边所有的和,然后每到一个位置,就用totalSum减去当前leftSum和当前位置的数,得到右边的和。只要左边和右边一比,equal,直接返回当前下标,世界就太平了。

代码其实很短,给你糊一个,反正我平时就这么写的:

publicintpivotIndex(int[] nums){
int totalSum = 0;
for (int num : nums) {
        totalSum += num;
    }
int leftSum = 0;
for (int i = 0; i < nums.length; i++) {
if (leftSum == totalSum - leftSum - nums[i]) {
return i;
        }
        leftSum += nums[i];
    }
return -1;
}

就上面这样。你说是不是很简单?可是吧,真正写的时候,别搞错了。那天我去公司楼下买咖啡,碰到我们组的小李,他非得在那用双指针写,写半天bug一堆。我说兄弟,这题就一遍for就行,省点力气多睡会觉多香。

对了,这里有个细节哈,别忘了下标0也是有可能成为答案的,比如[0,0,0,0]这种情况。你别先leftSum += nums[i],然后再判断,那你就直接错过0了。唉,这种低级错误我也犯过,半夜三点调bug,调到怀疑人生。

你们工作中可能会遇到那种很长很长的数组,性能其实也不算差,就两个for循环嘛,不过第一个for其实就是单纯求和。面试的时候如果有人追问复杂度,就直接怼回去O(n)。内存嘛,一个整型变量就能干了,别写出一堆没用的临时数组,浪费空间。

有时候真挺想吐槽,有些人喜欢把这种题搞得特别玄乎,非得上来用Map存着,又分前缀和、后缀和,还得画图。其实说白了,代码越简单越好维护,平时工作项目里也一样,能一遍for解决的事,别整花活。

-END-

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

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