借年终奖梳理公司历年来"神操作",网友笑了。。

1,302 阅读4分钟

S*皮

最近,一篇源自「大厂同事圈」的爆料火了,帖子里仔细梳理了这家大厂历年来的"神操作"。

21 年,以 15 薪 + WLB 为噱头进行大肆招聘,当时高管扬言,未来深圳总部的人员要扩编一倍。

22 年,公司流动性吃紧,开始进行"降本增效",零食饮料水果等福利开始取消。九月份开启首次大裁员。到了年底,无普调,正常绩效(B)年终只有 0.5 个月。

23 年,年初时,关于 22 年只有 0.5 个月年终的骂声仍未消停,某高层直接开启 3 月份的自提礼包(可报名离职,拿赔偿走人)活动,扬言要让离开的人后悔。放话后续阳光普调 5%,年终 back two normal。又到年底,正常绩效(B)2 个月,卡晋升。

24 年,开启考勤管理,严格执行工作日需在岗满 9.5 小时,下半年公司股价重回 100+,领导继续放话年终 diff last year。年底,以股票涨了为理由不给普调,正常绩效(B)还是 2 个月,还是卡晋升。

总的下来,当时 21 年冲着「15 薪 + WLB」入职的小伙伴,最终三年(正常绩效)下来,只收获到了 4.5 个月年终奖,以及逐渐收紧的福利,逐步加强的管理 🤣🤣🤣

这大饼看得我是一愣一愣的,成功消除了我昨天因为 华为人均年终 产生的不适感。

对此,你怎么看?过去几年的年终奖,是否有跑赢该大厂?欢迎评论区交流。

...

回归主题。

来一道和 HOT 100 级别的经典题。

题目描述

平台:LeetCode

题号:1305

给你 root1 root2 这两棵二叉搜索树。

请你返回一个列表,其中包含两棵树中的所有整数并按升序排序。

示例 1:

输入:root1 = [2,1,4], root2 = [1,0,3]

输出:[0,1,1,2,3,4]

示例 2:

输入:root1 = [1,null,8], root2 = [8,1]

输出:[1,1,8,8]

提示:

  • 每棵树的节点数在 [0,5000][0, 5000] 范围内
  • 105 <=Node.val<=105-10^5 <= Node.val <= 10^5

中序遍历 + 归并排序

利用 BST 中序遍历的有序性质,我们可以先对两棵树进行中序遍历,从而将树的结构转换为线性结构。

将两个有序序列合并成一个有序序列则是利用了经典的「归并排序」。

Java 代码:

class Solution {
    int INF = 0x3f3f3f3f;
    public List<Integer> getAllElements(TreeNode root1, TreeNode root2) {
        List<Integer> ans = new ArrayList<>();
        List<Integer> l1 = new ArrayList<>(), l2 = new ArrayList<>();
        dfs(root1, l1); dfs(root2, l2);
        int n = l1.size(), m = l2.size(), i = 0, j = 0;
        while (i < n || j < m) {
            int a = i < n ? l1.get(i) : INF, b = j < m ? l2.get(j) : INF;
            if (a <= b) {
                ans.add(a); i++;
            } else {
                ans.add(b); j++;
            }
        }
        return ans;
    }
    void dfs(TreeNode root, List<Integer> list) {
        if (root == null) return ;
        dfs(root.left, list);
        list.add(root.val);
        dfs(root.right, list);
    }
}

C++ 代码:

class Solution {
public:
    vector<int> getAllElements(TreeNode* root1, TreeNode* root2) {
        int INF = 0x3f3f3f3f;
        vector<int> ans;
        vector<int> l1, l2;
        dfs(root1, l1); dfs(root2, l2);
        int n = l1.size(), m = l2.size(), i = 0, j = 0;
        while (i < n || j < m) {
            int a = (i < n) ? l1[i] : INF, b = (j < m) ? l2[j] : INF;
            if (a <= b) {
                ans.push_back(a); i++;
            } else {
                ans.push_back(b); j++;
            }
        }
        return ans;
    }
    void dfs(TreeNode* root, vector<int>& list) {
        if (!root) return;
        dfs(root->left, list);
        list.push_back(root->val);
        dfs(root->right, list);
    }
};

Python 代码:

class Solution:
    def getAllElements(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> List[int]:
        INF = 0x3f3f3f3f
        ans = []
        l1, l2 = [], []
        self.dfs(root1, l1)
        self.dfs(root2, l2)
        n, m, i, j = len(l1), len(l2), 0, 0
        while i < n or j < m:
            a, b = l1[i] if i < n else INF, l2[j] if j < m else INF
            if a <= b:
                ans.append(a)
                i += 1
            else:
                ans.append(b)
                j += 1
        return ans
        
    def dfs(self, root: TreeNode, arr: list[int]) -> None:
        if not root:
            return
        self.dfs(root.left, arr)
        arr.append(root.val)
        self.dfs(root.right, arr)

TypeScript 代码:

function dfs(root: TreeNode | null, list: number[]): void {
    if (root === null) return;
    dfs(root.left, list);
    list.push(root.val);
    dfs(root.right, list);
}
function getAllElements(root1: TreeNode | null, root2: TreeNode | null): number[] {
    const INF = 0x3f3f3f3f;
    let ans = [];
    let l1 = [], l2 = [];
    dfs(root1, l1);
    dfs(root2, l2);
    let n = l1.length, m = l2.length, i = 0, j = 0;
    while (i < n || j < m) {
        let a = i < n ? l1[i] : INF;
        let b = j < m ? l2[j] : INF;
        if (a <= b) {
            ans.push(a); i++;
        } else {
            ans.push(b); j++;
        }
    }
    return ans;
};
  • 时间复杂度:令 nnmm 分别为两棵树的节点数量,跑中序遍历的复杂度为 O(n+m)O(n + m),构建答案复杂度为 O(max(m,n))O(\max(m, n))。整体复杂度为 O(n+m)O(n + m)
  • 空间复杂度:O(n+m)O(n + m)