某深圳大厂程序员女友在网上高调晒其男友工牌和收入,宣称其年薪高达300万,被其男友同事认出身份,随后在内网进行了举报~
刚看到个新闻贴子,说有个深圳大厂程序员,女友为了炫耀把他的工牌和年薪300万晒到网上,结果被同事认出来举报,最后这哥们直接被辞退了。
我作为程序员看这事,第一反应是:这不是“实力脱敏”而是“实力作死”。在大厂里,保密协议和合规要求几乎是红线,晒工牌就像在代码里写明文密码一样,分分钟埋雷。网友们有人骂女友太虚荣,也有人替男生惋惜。但说实话,责任并不全在女友,程序员自己没守住边界也是问题。
换个角度看,这事反映了很多人对“高薪”的迷思。外人看到的是年薪数字💰,可忽略了职场里信息安全、合规风险的重要性。就像开发中,你写出一个炫酷的功能没错,但如果破坏了安全底线,项目照样挂掉。
总的来说吧,炫耀是虚的,饭碗才是真的。【备注:文末可领最新资料】
算法题:按递增顺序显示卡牌
昨晚十一点多,我在公司楼下吹风,手机里有人问我:那个“翻牌后是递增”的题咋写来着?就是把一副牌按某个顺序排好,按“展示一张、把下一张移到队尾、再展示……”这种流程翻开时,看到的是递增序列。听着拗口?别慌,慢慢说。
你手里一堆数字牌,无序。我们要先给它们排个初始顺序,使得真正翻牌过程是:翻最上面那张、然后把新最上面的那张丢到牌尾、再翻……最后你看到的翻牌序列必须是从小到大。目标就是求这个初始顺序。
要想“看到的是递增”,那被翻出来的顺序其实已经确定了:应该依次是排序后的最小、次小、……。所以我们反过来想:把排序后的牌,按翻牌过程对应的位置,塞回去就行。关键在于:翻牌过程能不能只用“下标队列”模拟?答案是可以的。
想象桌上有 n 个位置 0..n-1。我们先把这些位置的下标按队列排好。然后:
取出队首位置,把当前最小的牌放到那里(相当于“这张会被第一轮翻出来”)。 再把新的队首位置丢到队尾(对应真实流程里的“跳过一张、甩到最后”)。 循环直到牌放完。
这样一轮下来,牌面就已经是我们要的初始顺序了。为啥对?因为我们严格复刻了“翻一张、移一张”的节奏,只不过是把“牌”换成了“位置”,再把排好序的牌按顺序填进去。
import java.util.*;
publicclassRevealCardsIncreasing{
publicint[] deckRevealedIncreasing(int[] deck) {
int n = deck.length;
Arrays.sort(deck); // 从小到大
int[] ans = newint[n];
Deque<Integer> q = new ArrayDeque<>();
for (int i = 0; i < n; i++) q.offer(i); // 位置队列
int idx = 0;
while (!q.isEmpty()) {
// 放当前最小的牌到应该“先被翻”的位置
ans[q.poll()] = deck[idx++];
// 模拟“把下一张移到队尾”:位置层面就是把下一个位置挪到队尾
if (!q.isEmpty()) q.offer(q.poll());
}
return ans;
}
// 小测一下
publicstaticvoidmain(String[] args){
RevealCardsIncreasing s = new RevealCardsIncreasing();
int[] deck = {17,13,11,2,3,5,7};
System.out.println(Arrays.toString(s.deckRevealedIncreasing(deck)));
// 期望类似:[2,13,3,11,5,17,7]
}
}
时间上,排序是 O(n log n),队列那点操作总共 O(n),所以主导还是排序。空间用到一个队列和答案数组,O(n)。实现里我用 ArrayDeque,别用 LinkedList 也行,但 ArrayDeque 当队列更干脆。
容易踩的坑就俩:一是忘了先排序(那就全乱了),二是位置队列的“移一张到末尾”要在队列非空时做一次,不然最后一步可能多搬家。
还有人喜欢从“最后一步往回倒带”:把排序好的牌从大到小处理,每次把当前牌放到队头,再把队尾的牌移到队头。效果等价,代码也就几行,不过 Java 里做头插、尾到头的操作,需要选合适的双端结构,也能写,但上面的下标队列更直观,团队里一看就懂。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html