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

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)

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

欢迎关注,明天见。

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

相关推荐
Asthenia041223 分钟前
Spring扩展点与工具类获取容器Bean-基于ApplicationContextAware实现非IOC容器中调用IOC的Bean
后端
FreeCultureBoy30 分钟前
macOS 命令行 原生挂载 webdav 方法
前端
bobz96541 分钟前
ovs patch port 对比 veth pair
后端
Asthenia04121 小时前
Java受检异常与非受检异常分析
后端
uhakadotcom1 小时前
快速开始使用 n8n
后端·面试·github
uhakadotcom1 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom1 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom1 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
JavaGuide1 小时前
公司来的新人用字符串存储日期,被组长怒怼了...
后端·mysql
uhakadotcom1 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试