什么是神中神公司?发表内卷言论,分分钟要你道歉...

谷歌

海的那边,这几天最乐的新闻,是谷歌前 CEO 批评员工不拼命工作后道歉

今年 4 月,谷歌前 CEO 埃里克·施密特(Eric Schmidt)在斯坦福大学的一次演讲中,被问及 OpenAI 和 Anthropic 等初创公司目前在人工智能领域领先谷歌的原因时,他指出,远程工作削弱了谷歌在人工智能竞赛中的竞争力。

换句话说,这位谷歌前 CEO 将谷歌在 AI 竞赛中落后的原因归咎于居家办公 🤣🤣🤣

施密特表示:

谷歌认为,工作与生活的平衡、早点回家、在家工作比业务领先更为重要。而创业公司之所以能成功,是因为人们拼命工作。很抱歉说的这么直白,但事实就是,如果你们都离开大学去开公司,如果你想和其他创业公司竞争,你就不会让员工在家工作,每周只来公司一天。

当时这些观点,并没有掀起太多波澜,毕竟只是高校级的小范围演讲。

直到本周二,施密特当时演讲的视频被斯坦福大学上传到了 YouTube 上。

好家伙,很快施密特就道歉了,承认自己对谷歌及其工作时间的评论有误,为自己的错误感到后悔,斯坦福大学也将包含该评论观点的视频进行了删除。

不知道当时这位 CEO 是为何离职,反正我猜狗家的员工,肯定是够开心的,这么卷的 CEO 不能留,可别起头破坏净土了。

回到这个论点本身,不评论对错。

绝大多数人是依靠拼命工作来获得成功,但也有(看上去)不怎么努力就能到达顶峰的天才,用初创公司的标准去要求谷歌,本身就不合理。

或者施密特这番表达,在他的角度看来是完全在理,但至少说话的方式错了。

...

回归主题。

来一道和「翻转二叉树」(Homebrew 作者 Max Howell 当年面试谷歌没做出来的算法题)差不多难度的题。

题目描述

平台:LeetCode

题号:652

给定一棵二叉树 root,返回所有重复的子树。

对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。

如果两棵树具有相同的结构和相同的结点值,则它们是重复的。

示例 1: alt

输入:root = [1,2,3,4,null,2,4,null,null,4]

输出:[[2,4],[4]]

示例 2: alt

输入:root = [2,1,1]

输出:[[1]]

示例 3: alt

输入:root = [2,2,2,3,null,3,null]

输出:[[2,3],[3]]

提示:

  • 树中的结点数在 范围内。

DFS + 哈希表

设计递归函数 String dfs(TreeNode root),含义为返回以传入参数 root 为根节点的子树所对应的指纹标识。

对于标识的设计只需使用 "_" 分割不同的节点值,同时对空节点进行保留(定义为空串 " ")即可。

使用哈希表记录每个标识(子树)出现次数,当出现次数为 2(首次判定为重复出现)时,将该节点加入答案。

Java 代码:

class Solution {
    Map<String, Integer> map = new HashMap<>();
    List<TreeNode> ans = new ArrayList<>();
    public List<TreeNode> findDuplicateSubtrees(TreeNode root) {
        dfs(root);
        return ans;
    }
    String dfs(TreeNode root) {
        if (root == nullreturn " ";
        StringBuilder sb = new StringBuilder();
        sb.append(root.val).append("_");
        sb.append(dfs(root.left)).append(dfs(root.right));
        String key = sb.toString();
        map.put(key, map.getOrDefault(key, 0) + 1);
        if (map.get(key) == 2) ans.add(root);
        return key;
    }
}

Typescript 代码:

let ans: Array<TreeNode>
let map: Map<stringnumber>
function findDuplicateSubtrees(root: TreeNode | null): Array<TreeNode | null{
    ans = new Array<TreeNode>()
    map = new Map<stringnumber>()
    dfs(root)
    return ans
};
function dfs(root: TreeNode | null): string {
    if (root == nullreturn " "
    let key = root.val + "_"
    key += dfs(root.left)
    key += dfs(root.right)
    if (!map.has(key)) map.set(key, 1)
    else map.set(key, map.get(key) + 1)
    if (map.get(key) == 2) ans.push(root)
    return key
}
  • 时间复杂度: DFS 过程复杂度为 ,对于每个子树需要构造出与子树同等规模的字符串,复杂度为 。整体复杂度为
  • 空间复杂度:

最后

巨划算的 LeetCode 会员优惠通道目前仍可用 ~

使用福利优惠通道 leetcode.cn/premium/?promoChannel=acoier,年度会员 有效期额外增加两个月,季度会员 有效期额外增加两周,更有超大额专属 🧧 和实物 🎁 福利每月发放。

我是宫水三叶,每天都会分享算法知识,并和大家聊聊近期的所见所闻

欢迎关注,明天见。

更多更全更热门的「笔试/面试」相关资料可访问排版精美的 合集新基地 🎉🎉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值