因为长相猥琐被公司挂了。。。
刚看到个贴子,说有个小伙子去面试,本来学历背景都不错,项目经验也到位,结果最后觉得是因为长相猥琐被挂了。对比之下,另一个长得帅的候选人,HR还主动多帮争取2k工资。
我觉得这事吧,程序员的世界里确实技术才是核心,但现实职场并不是纯粹看能力,外貌、沟通风格、甚至第一印象,都会在无形中影响面试官的判断。就像写代码,逻辑没问题,但界面丑陋、交互不友好,用户还是会觉得“差点意思”。面试就是“产品展示”,包装也很重要。
网友们说“长得丑被挂”其实有点夸张,我更倾向于相信这是综合气质问题,比如面试时不自信、表达不够清晰,容易被误判。程序员再怎么强调技术,也不能忽视软技能。
换个角度想,HR能帮帅哥多要2k,本质上是觉得他更“有价值”——不只是会写代码,还能代表公司形象。说到底,外貌无法选择,但气质、表达和自信是可以训练的。【备注:文末可领最新资料】
算法题:令牌放置
昨天晚上十一点多,在公司楼下等外卖的时候,小李问了我个“令牌放置”的题,意思大概是这样:有一条一维走廊,用字符串表示,. 代表空位能放令牌,# 是障碍放不了。一个令牌能覆盖它自己以及左右相邻三格中的有效格(越界就算没了)。目标——用最少的令牌让所有的 . 都被覆盖上。是不是很像在走廊里摆夜灯,省电省心那种。
从左到右贪心放“最右能放的位置”
具体说人话哈:你扫到位置 i 是未被覆盖的 .,那就优先把令牌放到 i+1(能放的话),因为越靠右,后面的区间就被顺带照亮更多;如果 i+1 是 # 或越界,就退而求其次放在 i;再不行(i 也是 #)就只能放在 i-1,但因为你是从左到右扫到 i 的,说明 i-1 要么早就处理过,要么本来就不是 .,这种“放在左边补救”的情况只在 i 是 # 且左边是 . 时发生,我们在走到那个 . 的时候就已经放过了,所以实现里只需要考虑“先放 i+1,不行放 i”这两步即可。放完记得把被覆盖的区间标记掉,然后指针跳过。
这个策略直觉上好理解:越向右放,覆盖区间向后延,能少放灯。
publicclassTokenPlacement{
// 返回最少令牌数,若无解返回 -1(比如整个字符串里没有能放的位置但有需要覆盖的点)
publicstaticintminTokens(String corridor){
char[] s = corridor.toCharArray();
int n = s.length, i = 0, ans = 0;
while (i < n) {
if (s[i] == '#') { i++; continue; }
// 走到这里,s[i] 是 '.' 且还未覆盖,需要放令牌
// 优先尝试 i+1
if (i + 1 < n && s[i + 1] == '.') {
ans++;
// 令牌放在 i+1,覆盖 i, i+1, i+2
i += 3; // 直接跳过被覆盖的区间
} elseif (s[i] == '.') {
// 放在 i,覆盖 i-1, i, i+1
ans++;
i += 2; // i 和 i+1 已覆盖,从 i+2 继续
} else {
// 理论不会到这,防御性处理
i++;
}
}
// 校验是否真的覆盖了所有 '.'(上面的逻辑保证了,但给个兜底)
// 如果题目要求严格“无可放位且仍有 . 则无解”,可以在循环中提前判断。
return ans;
}
publicstaticvoidmain(String[] args){
System.out.println(minTokens(".#...##..")); // 期望:3
System.out.println(minTokens("...")); // 期望:1(放中间)
System.out.println(minTokens("#.#")); // 期望:0
}
}
复杂度与边界
时间 O(n),只扫一遍;空间 O(1)。边界别忘了: 1)开头结尾的 .,放在最靠右(i+1)或当前 i 都能自然处理; 2)连续障碍 ### 直接跳; 3)若题目扩展为必须每个令牌恰好覆盖三格或覆盖范围变成半径 R,思路仍是“尽量往右放”,只是覆盖窗口和跳步要改成 R 的版本。
".#...##.."
i=0是.,i+1是#,放在i=0,覆盖0,1,跳到2;i=2是.,i+1=3也是.,果断放在3,覆盖2,3,4,跳到5;i=5是#连着两个#跳到7;i=7是.,i+1=8越界,放在7,覆盖6,7,8(越界),结束,共 3 个。
就这样,思路清、实现短,面试里也好讲。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html