查看原文
其他

23届研究生,要崩溃了,被裁了,快一个月没找到工作,白读研了,浪费3年时间。。。

博哥 数据结构和算法 2024-04-19

(关注数据结构和算法,了解更多新知识)


最近在网上看到一程序员在网上发帖称:23届,要崩溃了,运气真的差到极点了,努力这么多年,卷好几年java最终干了半年就被裁了,找了快一个月工作了就是没offer,心好累,白读研,白自学了,浪费三年。本来不信命,现在信了,命不好做什么努力都没用。



被裁员并不是因为个人能力不行,有时候即使一个人的能力很强,仍然可能面临被裁员的命运。这主要是因为职场环境的变化和大公司的策略调整。


一些公司可能会在业务调整或重组时选择裁员来降低成本或提高效率。在这种情况下,即使一个人能力很强,他们也可能成为公司削减成本的牺牲品。


因此,被裁员并不一定意味着个人能力不行。在面对职场的不确定性和变化时,保持灵活和适应性是非常重要的。同时,不断学习和提升自己的技能也是应对职场变化的最佳策略。接下来我们来看下各位网友的回复。


--------------下面是今天的算法题--------------


来看下今天的算法题,这题是LeetCode的第938题:二叉搜索树的范围和,我们来看下。


问题描述



来源:LeetCode第938题
难度:简单
给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。
示例1:

输入:root = [10,5,15,3,7,null,18], low = 7, high = 15

输出:32

示例2:

输入:root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10

输出:23


  • 树中节点数目在范围 [1, 2 * 10^4] 内

  • 1 <= Node.val <= 10^5

  • 1 <= low <= high <= 10^5

  • 所有 Node.val 互不相同


问题分析



这题让计算二叉搜索树中节点值位于[low,high]之间的所有节点之和。一种常规的解决思路就是遍历这棵树的所有节点,然后累加符合条件的节点值。

但这题说的是二叉搜索树,在二叉搜索树中左子树的值都小于根节点,右子树的值都大于根节点,并且每一棵子树也都满足这个条件,我们可以根据这个条件对这题做个优化。

因为右子树的值都比根节点大,所以如果根节点大于high,说明根节点的右子树也都大于high,不满足条件。只有在根节点值小于high的时候,右子树的有些值才有可能小于high。左子树同理。

JAVA:
public int rangeSumBST(TreeNode root, int low, int high) {
    if (root == null)
        return 0;
    int res = 0;
    if (root.val >= low && root.val <= high)
        res += root.val;

    if (root.val < high)
        res += rangeSumBST(root.right, low, high);
    if (root.val > low)
        res += rangeSumBST(root.left, low, high);

    return res;
}

C++:
public:
    int rangeSumBST(TreeNode *root, int low, int high) {
        if (root == nullptr)
            return 0;
        int res = 0;
        if (root->val >= low && root->val <= high)
            res += root->val;

        if (root->val < high)
            res += rangeSumBST(root->right, low, high);
        if (root->val > low)
            res += rangeSumBST(root->left, low, high);

        return res;
    }

C:
int rangeSumBST(struct TreeNode *root, int low, int high) {
    if (root == NULL)
        return 0;
    int res = 0;
    if (root->val >= low && root->val <= high)
        res += root->val;

    if (root->val < high)
        res += rangeSumBST(root->right, low, high);
    if (root->val > low)
        res += rangeSumBST(root->left, low, high);

    return res;
}

Python:
def rangeSumBST(self, root: Optional[TreeNode], low: int, high: int) -> int:
    if root is None:
        return 0
    res = 0
    if low <= root.val <= high:
        res += root.val

    if root.val < high:
        res += self.rangeSumBST(root.right, low, high)
    if root.val > low:
        res += self.rangeSumBST(root.left, low, high)

    return res


笔者简介
博哥,真名:王一博,毕业十多年,《算法秘籍》作者,专注于数据结构和算法的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以下载我整理的1000多页的PDF算法文档


继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存