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

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)

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

欢迎关注,明天见。

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

相关推荐
Martin -Tang15 分钟前
vite和webpack的区别
前端·webpack·node.js·vite
迷途小码农零零发16 分钟前
解锁微前端的优秀库
前端
王解1 小时前
webpack loader全解析,从入门到精通(10)
前端·webpack·node.js
我不当帕鲁谁当帕鲁1 小时前
arcgis for js实现FeatureLayer图层弹窗展示所有field字段
前端·javascript·arcgis
那一抹阳光多灿烂1 小时前
工程化实战内功修炼测试题
前端·javascript
放逐者-保持本心,方可放逐2 小时前
微信小程序=》基础=》常见问题=》性能总结
前端·微信小程序·小程序·前端框架
码上一元2 小时前
SpringBoot自动装配原理解析
java·spring boot·后端
毋若成4 小时前
前端三大组件之CSS,三大选择器,游戏网页仿写
前端·css
枫叶_v4 小时前
【SpringBoot】22 Txt、Csv文件的读取和写入
java·spring boot·后端
红中马喽4 小时前
JS学习日记(webAPI—DOM)
开发语言·前端·javascript·笔记·vscode·学习