前360员工爆料:和 HR 要 50 万的包,最后给了 55 万,每个月还有 3000 补贴。。

科技   2024-12-29 12:58   陕西  

最近在网上看到一个挺有意思的爆料。

前360的员工爆料,自己和HR谈薪资时,开口要了50万的年薪,结果HR最后给了55万,而且不是给期权,股票的那种,每个月还给了3000元的补贴!真的太爽了


面试的时候,我们总是琢磨着“我要多少才算合理”,然后心里给自己定个底线,“如果HR敢给我低于这个数,我就直接站起来走人!”😂 

但这个前360的员工真是够牛,50万开口,结果HR给了55万,还不是期权股票这种要虚不虚的,每月还有3000的补贴,简直不要太安逸了,神仙公司呀!

网友也表示,自己当初开口要了54万,HR反而给了63万。真让人羡慕!


不知道大家是不是都遇过这种“超额兑现”的好事?不过吧,话说回来,能拿到个好薪资,多少还是得看自己在面试时的谈判技巧和勇气,永远不要低估自己!

算法:根据二叉树创建字符串

今天我们来聊聊一个常见的算法题:根据二叉树创建字符串

可能一开始看着就头大,觉得这是不是又是个套路题?不过,咱们程序员就是需要不断用代码去解决这些“套路”,然后从中获得成就感,不是吗?😏

好,话不多说,开始讲解。题目是这样的:

给定一个二叉树,每个节点包含一个整数值,返回该树的所有子树的字符串表示。按预定规则构建字符串:对于每个节点,如果该节点没有左右孩子,则返回该节点的值;如果该节点只有左孩子,则返回节点的值和左子树的字符串表示;如果该节点同时有左右孩子,则返回节点的值、左子树的字符串表示、右子树的字符串表示。节点的值与左右子树之间需要用“()”包起来。

这个题目其实看似简单,但细节和边界条件挺多,处理不好就容易出问题。我们一开始可以考虑一个递归的思路——毕竟这题的结构本身就像一个树,递归是天生和树结构配合得最好的工具。🌳

那么,我们怎么一步一步地来实现呢?

首先,我们需要定义递归函数,返回每个子树的字符串。我们从根节点开始,如果当前节点有左右孩子,返回节点值加上子树的字符串;如果只有左孩子,就返回节点值加上左子树的字符串;如果没有孩子,直接返回节点值。

关键代码实现

我们来写一段代码,看看如何实现:

public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x) {
        val = x;
    }
}

public class Solution {
    public String treeToStr(TreeNode root) {
        if (root == null) {
            return "";
        }

        // 先获取当前节点的值
        String result = String.valueOf(root.val);

        // 如果有左子树,递归处理
        if (root.left != null) {
            result += "(" + treeToStr(root.left) + ")";
        } 
        // 如果没有左子树,但有右子树,空括号也要加上
        else if (root.right != null) {
            result += "()";
        }

        // 如果有右子树,递归处理
        if (root.right != null) {
            result += "(" + treeToStr(root.right) + ")";
        }

        return result;
    }
}

这个实现的思路就很清晰了:

  1. 根节点值:首先,我们把当前节点的值转成字符串,并赋给result
  2. 左子树:如果有左子树,就递归处理左子树的字符串,并加上括号。如果没有左子树,但有右子树,我们仍然需要加个空括号来保持格式一致。
  3. 右子树:如果右子树存在,同样递归处理,并加上括号。

解析

  • 对于每一个节点,我们首先处理当前节点的值。对于没有左子树的节点,如果有右子树,我们加上空括号。
  • 递归的过程中,我们一直处理左右子树,直到叶子节点——这些节点没有左右孩子,因此它们的返回值就是其自身的值。

举个例子

假设我们有一个如下的二叉树:

    1
   / \
  2   3
   \
    4

调用treeToStr(root)时,最终返回的结果是:

"1(2()(4))(3)"

解释一下:

  • 根节点 1 有左子树 2 和右子树 3
  • 节点 2 没有左子树,但有右子树 4,所以它返回 "2()(4)"
  • 节点 3 是叶子节点,没有子树,直接返回 "3"

这就是我们想要的结果。每个节点的表示都符合题目要求,左右子树按照规则包裹在括号内。

细节与优化

  1. 空节点处理:我们在处理空节点时,避免了不必要的复杂性。比如说如果某个节点没有左右子树,我们通过判断条件直接返回空字符串。
  2. 递归效率:由于每个节点只访问一次,整体的时间复杂度是O(n),其中n是树中的节点数。递归的深度最坏情况下是O(n),也就是树的高度。

小结

这个题目表面看起来不难,但如果不仔细处理边界情况(比如空子树的括号),很容易写错。而且这道题的背后隐含了对二叉树结构的理解,递归的应用也相当重要。对于面试来说,不仅要会做,还要能讲清楚为什么这样做,细节处理得当才能得高分。💯

希望大家通过这个题目能更深入地理解二叉树的递归处理方式。遇到类似的题目时,思路清晰,代码也就能写得顺手!

对编程、职场感兴趣的同学,可以链接我,微信:coder301 拉你进入“程序员交流群”。
🔥东哥私藏精品 热门推荐🔥

东哥作为一名超级老码农,整理了全网最全《Java高级架构师资料合集》

资料包含了《IDEA视频教程》《最全Java面试题库》、最全项目实战源码及视频》及《毕业设计系统源码》总量高达 650GB 。全部免费领取!全面满足各个阶段程序员的学习需求。

Java面试那些事儿
回复 java ,领取Java面试题。分享AI编程,Java教程,Java面试辅导,Java编程视频,Java下载,Java技术栈,AI工具,Java开源项目,Java简历模板,Java招聘,Java实战,Java面试经验,IDEA教程。
 最新文章