程序员老鬼

特斯拉工作6年被裁,看看总共拿到多少赔偿

这哪是被裁,像是领了个“离职大礼包”。

特斯拉干了6年,被裁之后一算账,光补偿就挺吓人。工龄按6年算,再加上额外3个月,差不多拿了9个月工资,三十多万先到账。年假也没糊弄,法定的、公司多给的,折成钱又是几万。

更夸张的是股票。因为裁员触发加速归属,本来可能还得等的RSU,直接折现拿到手,又是一大笔。再加上之前产线关键期留下来干活,公司还补了两个月工资,当作留任奖励。

Image

工资、社保、公积金也给到5月底,连找工作的辅导服务都安排了。

最后一合计,六十多万。

打工人看完真有点沉默。平时说大厂裁员吓人,但这个赔法,至少台面上是做足了。很多公司别说N+3了,能把N给利索都算烧高香。

特斯拉这波,裁得狠不狠另说,钱是真没少给。

面试题:拼车

车不是一站一站开的,人数也不是一段一段硬算的。

这题卡人的地方不在“拼车”,而在你有没有把上下车看成两次人数变化。有人从 from 上车,人数增加;到 to 下车,人数减少。中间每个站点到底坐了多少人,扫一遍就知道。

我一般看到这种数据:

trips = [[2,1,5],[3,3,7]]
capacity = 4

第一眼不会去模拟每个乘客,也不会建什么车厢对象。那都是给自己找事。

真正有用的信息只有两条:

1 号点 +2
5 号点 -2
3 号点 +3
7 号点 -3

扫到 3 号点的时候,车上人数变成 5,容量只有 4,直接炸。

这种题用差分数组很顺手。站点如果题目限制在 1000 以内,就别排序了,数组扫过去,干净。

classSolution{
publicbooleancarPooling(int[][] trips, int capacity){
int[] seatChange = newint[1001];

for (int[] trip : trips) {
int people = trip[0];
int getOn = trip[1];
int getOff = trip[2];

            seatChange[getOn] += people;
            seatChange[getOff] -= people;
        }

int inCar = 0;
for (int stop = 0; stop < seatChange.length; stop++) {
            inCar += seatChange[stop];

if (inCar > capacity) {
returnfalse;
            }
        }

returntrue;
    }
}

这里有个细节别写错:getOff 这个点是下车点,不算还坐在车上。

比如一个人从 1 到 5,意思是在 5 号点已经下车了,所以:

seatChange[1] += people;
seatChange[5] -= people;

不是在 5 + 1 的地方减。

这类题最怕写成两层循环:

for 每个行程
for 每个站点
        加人数

数据小的时候能过,数据一大就很难看。更重要的是,这个写法把问题想重了。车上人数不是每段重新算,而是沿着站点不断累加变化。

如果站点范围题目没给得很小,那我会换成 TreeMap,只记录发生变化的位置,再按站点顺序扫:

import java.util.Map;
import java.util.TreeMap;

classSolution{
publicbooleancarPooling(int[][] trips, int capacity){
        TreeMap<Integer, Integer> changes = new TreeMap<>();

for (int[] trip : trips) {
            changes.merge(trip[1], trip[0], Integer::sum);
            changes.merge(trip[2], -trip[0], Integer::sum);
        }

int current = 0;
for (Map.Entry<Integer, Integer> entry : changes.entrySet()) {
            current += entry.getValue();

if (current > capacity) {
returnfalse;
            }
        }

returntrue;
    }
}

数组版适合站点范围小,TreeMap 版适合站点范围大。思路一样,都是把“某段路有多少人”转换成“某个点人数发生了什么变化”。

这题只要差分这个口子打开,就没什么复杂的了。上车加,下车减,从左往右扫,超过容量就返回 false。不超过,就说明这辆车扛得住。