刚看到个贴子,说一兄弟在原公司被降职降薪,正郁闷呢,被猎头挖走,新公司口头给到45万年薪。结果签合同才发现,这45万里有一块是“股权激励”,要干满两年才能拿到,瞬间觉得自己被耍了。

关键不在“45万”,而在“看没看清楚”。职场谈薪就像点外卖,你只听商家说“满减后到手15块”,结果一看账单,优惠券、满减、平台补贴一堆,真掏的钱还是不少。 换到工作上也是,总包=固定工资+奖金+期权+各种“如果”,口头说再好听,不写进合同都是白搭。
不过话说回来,也别把期权妖魔化,真有成长性的公司,股权是加分项,只是千万别把“未来也许有的”当成“现在已经到手的”。
昨天晚上十一点多,我在公司楼下抽烟呢,我们组小李跑过来问我个题,说“全局倒置与局部倒置”到底咋一眼判断……我当时困得要死还装淡定,嘴上说简单,心里想这玩意要是讲成面试官那套,群里肯定嫌我装,对吧。
先把概念别绕晕:局部倒置就是相邻俩位置 i 和 i+1,如果 A[i] > A[i+1] 这算一个。全局倒置更狠,任意 i < j 只要 A[i] > A[j] 都算。题目问的是:全局倒置的数量是不是等于局部倒置数量。翻译成人话就是——数组里有没有那种“隔着一个人还在插队”的倒置,也就是存在 i < j-1 还 A[i] > A[j] 的情况;有这种就完蛋,全局一定比局部多。
怎么写成代码就舒服了:我一般用“后缀最小值”卡一下。你想啊,如果在位置 i,只要 A[i] 比 i+2 之后(注意是跳过相邻)任何一个最小值还大,那就说明它和更远的人形成了倒置——这就是非局部倒置,直接 false。否则一路都没撞上,就 true。
Java 我随手写个,O(n),也不费脑子:
classSolution{publicbooleanisIdealPermutation(int[] nums){int n = nums.length;// suffixMin 表示从当前位置往右的最小值(我们从右往左扫)int suffixMin = Integer.MAX_VALUE;// i 需要对比的是 i+2..n-1,所以从 n-1 往左更新 suffixMin,// 并在每个 i 处拿到“i+2 的后缀最小”for (int i = n - 1; i >= 0; i--) {if (i + 2 < n) {// 先把 i+2 纳入 suffixMin(因为 suffixMin 维护的是当前 i 右侧的最小) suffixMin = Math.min(suffixMin, nums[i + 2]);if (nums[i] > suffixMin) returnfalse; } }returntrue; }}小李当时还不放心,说“万一你写错了呢”。我就又给他塞了个暴力对拍,平时你们刷题也可以这么自测两组逻辑,省得自信过头:
import java.util.*;classChecker{staticbooleanbrute(int[] a){int n = a.length;int local = 0, global = 0;for (int i = 0; i < n - 1; i++) if (a[i] > a[i + 1]) local++;for (int i = 0; i < n; i++)for (int j = i + 1; j < n; j++)if (a[i] > a[j]) global++;return local == global; }staticbooleanfast(int[] a){int n = a.length, suffixMin = Integer.MAX_VALUE;for (int i = n - 1; i >= 0; i--) {if (i + 2 < n) { suffixMin = Math.min(suffixMin, a[i + 2]);if (a[i] > suffixMin) returnfalse; } }returntrue; }publicstaticvoidmain(String[] args){ Random r = new Random(1);for (int t = 0; t < 2000; t++) {int n = 1 + r.nextInt(8);int[] a = newint[n]; List<Integer> p = new ArrayList<>();for (int i = 0; i < n; i++) p.add(i); Collections.shuffle(p, r);for (int i = 0; i < n; i++) a[i] = p.get(i);if (brute(a) != fast(a)) { System.out.println("Mismatch: " + Arrays.toString(a));break; } } System.out.println("done"); }}反正他看完就说懂了:本质就是“别出现距离大于1的倒置”。我说对,你把它当成排队插队就好,隔一个人插队最容易被抓包……哎我先不说了,群里又有人@我问线上慢查询了。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html