程序员老鬼

兄弟被降职降薪,被猎头挖新公司时承诺45万年薪,结果签合同才发现这45万里有“部分“是股权激励,还得2年后才能兑现。。

刚看到个贴子,说一兄弟原公司被降职降薪,好不容易被猎头挖去,新公司口头说年薪45万,结果签合同一看,发现有很大一块是“股权激励”,还得两年后才能拿到,整个人当场傻眼。

Image

我觉得这事吧,首先锅在信息不对称。猎头只说“总包45万”,但总包=现金+绩效+期权+各种不一定给你的东西,这话说得越模糊,你就越要长心眼。网友回帖有人骂猎头骗人,也有人说“有股权说明公司重视你”,但关键不是有没有股权,而是——现金多少?保底多少?兑现条件写没写在纸面上?

不过话说回来,被坑一次也别觉得世界末日,把这次当学费交了,以后每换工作都搞清楚“总包构成”,慢慢你的职场路就会越来越稳。

面试题:全局倒置与局部倒置

刚撸完一道老题:“全局倒置与局部倒置”,顺手记个小笔记。

题意不复杂:给你一个 0…n-1 的排列,问是不是“每一个全局倒置都是局部倒置”。

  • 局部倒置:只看相邻一对 (i, i+1),满足 A[i] > A[i+1]
  • 全局倒置:任意一对 (i, j),i < j 且 A[i] > A[j]

局部倒置一定是全局倒置,所以题目本质是:有没有“跨过一格以上”的倒置。如果存在 i + 2 <= j 且 A[i] > A[j],就凉了。

直观做法是双重循环数对儿,O(n²) 肯定不行。架构师思路要更“算账”:只要能在 O(n) 里发现“非局部倒置”即可。一个好用的小技巧:维护前缀最大值,随扫随比。

publicbooleanisIdealPermutation(int[] nums){
int n = nums.length;
int prefixMax = nums[0];
// 只需要和 i+2 位置比,i+1 的倒置已经计入局部里了
for (int i = 0; i + 2 < n; i++) {
        prefixMax = Math.max(prefixMax, nums[i]);
if (prefixMax > nums[i + 2]) {
returnfalse; // 出现非局部倒置
        }
    }
returntrue;
}

这题看着是算法,其实很有工程味:

  • 不纠结“要把所有倒置数出来”,而是精准找“多出来的那一类”
  • 用一趟扫描解决问题,空间 O(1),非常适合落到线上服务里当一个轻量级数据校验

很多时候写代码也是这样,别一上来就全量统计、全量排序,先想想:我真正关心的那个“例外”到底长什么样? 找对了特征,复杂度自然就下来了。

-END-