星舰第三次试飞成功,见证历史:火箭一响,下跌万两

SpaceX 历史级成功

昨晚,马斯克旗下美国太空探索技术公司(SpaceX)进行了星舰的第三次试飞。

先来简单回顾下,前两次的试飞时间线:

  • 首次试飞(2023-04):升空2分30秒后火箭姿态失稳并开始旋转,最终解体爆炸,发射未达到预期目的;
  • 第二次试飞(2023-11):火箭级间分离后,助推器爆炸,二级仓失联并发生不可控降落,试飞扔未达预期;

前面两次都是放烟花,严格来说连像样的试飞都不算。

试飞的主要目的,是想测算星舰能否达到环绕速度,这是论证人类能否星球移民的关键。

在马斯克之前,以往发射的都是载重规模不大的小型火箭,不具备大面积载人条件。

马斯克的星舰是高120米,重5000吨的巨无霸,差不多就是一栋高40层的常规建筑。

如果能够推动这样的巨无霸,摆脱地球引力,冲向太空,那么普通人可触及星辰大海将不会是梦想。

SpaceX 做到了。

这次没有烟花,星舰带着全人类的期望,一点点在星空中消失不见,就是最好的结果。

我和马斯克都第一时间在各自社交平台表示了祝贺。

这次的试飞达成众多里程碑:完成一二级分离、达到环绕速度、顺利进入轨道。

这是毫无疑问的,值得被载入历史的时刻!!!

虽然星舰在回收的时候,仍然失联,近5000w美元的构建成本又只用了一次,但我们已经得到了最想要的答案。

带着这一丝感动,我必须支持一下马斯克以表尊敬。

小小地买入 1.7k 刀的 TSLA 以表支持:

结果:

资本家不懂马老板的浪漫,真就是 火箭一响,下跌万两。

得亏即使是"投机",我也有严格的止损铁律,于是在买入后上涨 +0.6% 后转头不久后便卖出:

小亏 30 刀,但想想星舰成功发射,这钱亏得乐意。

...

回归主线。

来做一道和「特斯拉」相关的算法原题。

题目描述

平台:LeetCode

题号:687

给定一个二叉树的 root,返回 最长的路径的长度,这个路径中的每个节点具有相同值。

这条路径可以经过也可以不经过根节点。

两个节点之间的路径长度,由它们之间的边数表示。

示例 1:

ini 复制代码
输入:root = [5,4,5,1,1,5]

输出:2

示例 2:

ini 复制代码
输入:root = [1,4,5,4,4,5]

输出:2

提示:

  • 树的节点数的范围是 <math xmlns="http://www.w3.org/1998/Math/MathML"> [ 0 , 1 0 4 ] [0, 10^4] </math>[0,104]
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> − 1000 < = N o d e . v a l < = 1000 -1000 <= Node.val <= 1000 </math>−1000<=Node.val<=1000
  • 树的深度将不超过 1000

递归

设计递归函数 int dfs(TreeNode root),含义为传入根节点 root,返回以该节点为起点,往下走同值路径所能经过的最大路径长度(即不能同时往左右节点走),同时使用全局变量 max 记录答案路径所能经过最大路径长度。

在递归函数内部,先通过递归 root 的左右子节点,拿到以 root.leftroot.right 为起点的最大路径长度 lr,然后根据当前节点值和左右子节点值的相等关系来更新 ans,同时用 cur 维护「以当前节点 root 为目标路径中深度最小(位置最高)节点时」所经过的最大路径长度。

Java 代码:

Java 复制代码
class Solution {
    int max = 0;
    public int longestUnivaluePath(TreeNode root) {
        dfs(root);
        return max;
    }
    int dfs(TreeNode root) {
        if (root == null) return 0;
        int ans = 0, cur = 0, l = dfs(root.left), r = dfs(root.right);
        if (root.left != null && root.left.val == root.val) {
            ans = l + 1; cur += l + 1;
        }
        if (root.right != null && root.right.val == root.val) {
            ans = Math.max(ans, r + 1); cur += r + 1;
        }
        max = Math.max(max, cur);
        return ans;
    }
}

C++ 代码:

C++ 复制代码
class Solution {
public:
    int maxv = 0;
    int dfs(TreeNode* root) {
        if (root == nullptr) return 0;
        int ans = 0, cur = 0;
        int l = dfs(root->left), r = dfs(root->right);
        if (root->left != nullptr && root->left->val == root->val) {
            ans = l + 1; cur += l + 1;
        }
        if (root->right != nullptr && root->right->val == root->val) {
            ans = max(ans, r + 1); cur += r + 1;
        }
        maxv = max(maxv, cur);
        return ans;
    }
    int longestUnivaluePath(TreeNode* root) {
        dfs(root);
        return maxv;
    }
};

Python 代码:

Python 复制代码
class Solution:
    def longestUnivaluePath(self, root: Optional[TreeNode]) -> int:
        maxv = 0
        def dfs(root):
            nonlocal maxv
            if not root: return 0
            ans, cur = 0, 0
            l, r = dfs(root.left), dfs(root.right)
            if root.left and root.left.val == root.val:
                ans = l + 1
                cur += l + 1
            if root.right and root.right.val == root.val:
                ans = max(ans, r + 1)
                cur += r + 1
            maxv = max(maxv, cur)
            return ans
        dfs(root)
        return maxv

TypeScript 代码:

TypeScript 复制代码
let max = 0;
function longestUnivaluePath(root: TreeNode | null): number {
    max = 0
    dfs(root)
    return max
};
function dfs(root: TreeNode | null): number {
    if (root == null) return 0
    let ans = 0, cur = 0, l = dfs(root.left), r = dfs(root.right)
    if (root.left != null && root.left.val == root.val) {
        ans = l + 1; cur += l + 1
    }
    if (root.right != null && root.right.val == root.val) {
        ans = Math.max(ans, r + 1); cur += r + 1
    }
    max = Math.max(max, cur)
    return ans
}
  • 时间复杂度: <math xmlns="http://www.w3.org/1998/Math/MathML"> O ( n ) O(n) </math>O(n)
  • 空间复杂度:忽略递归带来的额外空间开销,复杂度为 <math xmlns="http://www.w3.org/1998/Math/MathML"> O ( 1 ) O(1) </math>O(1)

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

欢迎关注,明天见。

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

相关推荐
小白学习日记36 分钟前
【复习】HTML常用标签<table>
前端·html
丁总学Java1 小时前
微信小程序-npm支持-如何使用npm包
前端·微信小程序·npm·node.js
姜学迁1 小时前
Rust-枚举
开发语言·后端·rust
yanlele1 小时前
前瞻 - 盘点 ES2025 已经定稿的语法规范
前端·javascript·代码规范
爱学习的小健1 小时前
MQTT--Java整合EMQX
后端
懒羊羊大王呀1 小时前
CSS——属性值计算
前端·css
睡觉然后上课2 小时前
c基础面试题
c语言·开发语言·c++·面试
北极小狐2 小时前
Java vs JavaScript:类型系统的艺术 - 从 Object 到 any,从静态到动态
后端
xgq2 小时前
使用File System Access API 直接读写本地文件
前端·javascript·面试
用户3157476081352 小时前
前端之路-了解原型和原型链
前端