公司要裁员,领导让我挑5个人,选了几个让我不爽的关系户,结果报上去以后~
刚刷到个程序员吐槽:公司裁员,领导让我挑5个人,我顺手选了几个关系户,结果领导直接说:关系户的事以后少掺和,做事要注意分寸。😶🌫️
我觉得吧,这种局面程序员遇到也真的是无语。说白了,技术再硬,碰到“潜规则”还是得让步。网友们一边骂关系户,一边感叹职场环境难混,但其实哪个大厂没点这种“默认”操作?换成代码就是,不管你多优化,主程序没权限直接改,谁也白搭。
我的看法是,做技术久了都明白,别太天真以为自己能掌控全局。领导让你做选择题,其实答案早写好了。网友说这种事儿只能当吃瓜,我倒觉得,遇到关系户,少掺和、注意分寸反倒是自保的智慧。【备注:文末可领最新资料】
算法题:压缩字符串
你们有没有遇到过,就是那种一个字符串,比如说 "aaabbccccd",面试官让你把它压缩成 "a3b2c4d1" 这种格式?意思就是连续相同的字符,你就计数,比如有几个a就写a3,有几个b就b2这样。反正那天小李在群里问,说他写得可绕了,循环里又嵌if又嵌while,自己都看晕了。其实这题思路特别直,但一到现场很多人会手抖,乱了。
我印象特别深,有一次凌晨两点在床上刷leetcode,迷迷糊糊写完跑用例,一堆越界,原因就是忘了最后一个字符要单独处理。我真是被坑得怀疑人生。你们谁没碰到过,都是血泪史。
你就想吧,这种连续字符计数的需求,不就是一个指针一直走,然后遇到不一样的就结算一次,写进结果,然后重置计数?对吧。核心逻辑其实特别口水:
先拿第一个字符当参考,计数器设置成1
从第二个字符开始,一个一个看
如果一样,就加1 不一样,说明上一段结束了,把那个字符和计数拼到结果里,然后计数重置成1,参考字符也换掉
别忘了,循环完了最后一组也得拼一下(这个坑超多人中)
我那会儿懒,直接用StringBuilder,性能还能好点。
你们要看代码吧,别说我不仗义啊,直接贴:
public String compress(String s){
if (s == null || s.length() == 0) return"";
StringBuilder sb = new StringBuilder();
char prev = s.charAt(0);
int count = 1;
for (int i = 1; i < s.length(); i++) {
char c = s.charAt(i);
if (c == prev) {
count++;
} else {
sb.append(prev).append(count);
prev = c;
count = 1;
}
}
// 别忘了最后一组
sb.append(prev).append(count);
return sb.toString();
}
你们发现没有,其实就是for循环里一个判断就行了,最后再收尾。小李说他之前每次遇到都脑子一热,直接用HashMap,后面再排序拼接。拜托,这里HashMap根本没必要,顺序本来就有嘛。
说真的,实际业务场景其实很少会让你直接压缩字符串,但这个题考察的就是你对数组、指针、循环这些最基本的掌握。你像那种空字符串、全是一样的字符、只有一个字符的,最好写测试用例测测。比如 "a" 结果就是 "a1", "aaa" 结果 "a3", "abc" 就 "a1b1c1"。面试官就爱出这些恶心测试点。
还有,有时候面试官会变体一下,说只压缩后长度更短的时候才返回压缩后的,不然原样输出。其实就是再加个if判断sb和原串长度比比大小嘛,顺手一加。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html