随着GPT的爆火,大模型方向近期也迎来越来越多的机会和发展。而且作为工作几年CRUD的后端,感觉后端开发是越来越卷了。

大家好呀,我是飞鱼。

随着GPT的爆火,大模型方向近期也迎来越来越多的机会和发展。

❝而且作为工作几年CRUD的后端,感觉后端开发是越来越卷了。

这里也不是鼓励大家赶紧去转大模型,可以先了解一下新的行业,新的机会,更好的规划自己未来的职业发展。

❝现在招聘大模型的岗位还是比较少的,而且也出现很多培训大模型的(大部分是收割韭菜的,大家也别被骗了)。

目前大模型工程师有以下几个方向

❝大模型数据工程师:

  • 数据清洗/ETL/Data Engine/Pipeline

大模型平台工程师:

  • 分布式训练/大模型集群/工程基建

大模型算法工程师:

  • 搜广推/对话机器人/AIGC等

大模型部署工程师:

  • 推理加速/跨平台/端智能/嵌入式等

就目前的现状,对于数据工程师,特别是有经验的数据工程师,是非常稀缺的。

❝多关心数据,积累高质量训练/测试集的构建经验,对数据的Sense,是最直接,也是最适合用到未来工作当中的。

想做应用的,建议深耕某个垂直领域。

❝比如对话机器人,问答系统,金融/医疗/教育方向,找一个具体的场景,把它做好,做深。

每日一题

题目描述

❝给定一个二叉树,判断它是否是 平衡二叉树。

解题思路

递归

三点注意事项:

  • 左子树是平衡二叉树
  • 右子树是平衡二叉树
  • 左右子树高度不超过1

代码实现

Java代码:

class Solution {
    public boolean isBalanced(TreeNode root) {
        //只要不存在不平衡的子树,则整个树平衡
        return depth(root) != -1;
    }
    //递归求解每个子二叉树的平衡性,一旦有不平衡的,递归向上返回-1,结束判断
    public int depth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        //计算左节点的深度
        int left = depth(root.left);
        //计算右节点深度
        int right = depth(root.right);
        //如果本层根节点的二叉树不平衡则返回-1,如果其子树不平衡一样
        if (Math.abs(left - right) > 1 || left == -1 || right == -1) {
            return -1;
        }
        return Math.max(left, right) + 1;
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.

Python代码:

class Solution:
    def isBalanced(self, root):
        # 只要不存在不平衡的子树,则整个树平衡,调用depth方法判断,若返回值不是 -1 则表示平衡
        return self.depth(root)!= -1
    def depth(self, root):
        if root is None:
            return 0
        # 计算左子树深度
        left = self.depth(root.left)
        # 计算右子树深度
        right = self.depth(root.right)
        # 如果本层根节点的二叉树不平衡(左右子树高度差绝对值大于1)或者左、右子树有返回 -1 的情况(即不平衡),则返回 -1
        if abs(left - right) > 1 or left == -1 or right == -1:
            return -1
        return max(left, right) + 1
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

Go代码:

func (s *Solution) IsBalanced(root *TreeNode) bool {
    return s.Depth(root)!= -1
}
func (s *Solution) Depth(root *TreeNode) int {
    if root == nil {
        return 0
    }
    // 递归计算左子树深度
    left := s.Depth(root.Left)
    // 递归计算右子树深度
    right := s.Depth(root.Right)
    // 如果当前节点的左右子树高度差绝对值大于1,或者左、右子树有返回 -1 的情况(即不平衡),则返回 -1
    if abs(left-right) > 1 || left == -1 || right == -1 {
        return -1
    }
    // 返回左右子树深度最大值加1(代表加上当前节点这一层)
    return max(left, right) + 1
}
// abs函数用于计算整数的绝对值
func abs(a int) int {
    if a < 0 {
        return -a
    }
    return a
}
// max函数用于返回两个整数中的较大值
func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.

复杂度分析

❝时间复杂度:O(n)

  • 其中 n 为二叉树的节点个数。

空间复杂度:O(n)。

  • 最坏情况下,二叉树退化成一条链,递归需要 O(n) 的栈空间。

文章来自:51CTO

Loading

作者 yinhua

发表回复