没人比小米更懂内卷

小米汽车

昨天晚上雷军终于公布了小米汽车的价格。

发布会直播截图,记住雷总穿着,待会考
发布会直播截图,记住雷总穿着,待会考
  • 标准版:21.59W
  • Pro 版:24.59W
  • Max 版:29.99W

此前外界的普遍预期是 23W~25W,实际公布价格比预期要低 2~4W,自然是平地一声雷。

"雷神"二字不仅刷爆了各个平台的直播间弹幕,同时也登上了微博热搜:

alt

其实昨晚发布会正式开始前,部分论坛和朋友圈就 PO 出了雷军(带汽车价格)的彩排照:

alt

然后发布会一开始,我重点留意了一下雷军穿的衣服,和爆料图中的一模一样,当时心里就凉了一截。

带着「雷军,你快说啊」的忐忑心情,又听了近 2 个小时的详细介绍。

还好最后公布的价格,确实对得起米粉们的期待。

我不是米粉,但是对雷军的个人印象还算可以。

小米作为全国顶尖的制造业公司,又有着鲜明的互联网基因,有自己独到的产品思维,入局造车,或许真的能在 3~5 年成为牌桌上的选手。

可惜今天 H 股那边休市,不然还真的想看看资本是怎么投票的。

alt

发布会上,雷军提到小米汽车卖这个价格,是要亏钱的。

虽然对车圈了解不深,没法从成本角度去辨别,但这话我是真的信

首先雷老板就是老实人,别人都是说是几百万、一千万以内最好的车,最终卖个大几十万,雷老板就说 50W 以内最好,最终 22W 不到。

真诚,就是小米的护城河。

其次,要想知道 22W 是不是真亏钱,可以对标国内屠夫 BYD 的旗舰轿车汉 EV 是什么价格,就大概知道了。

差不多续航的汉 EV 也要 21.98W,这可是卖了很多年的汉。

小米前期的产能爬坡阶段,卖 21.59W,说亏钱,可太合理了。

价格有惊喜,市场自然会有好的反应。

在 22:00 正式开售之后,4 分钟定金数破 1W,7 分钟定数破 2W。

alt

不过小米的小编搞错了一基本概念:大定通常是指不能退的,而小米除了 5000 台创始版以外,都是定金 7 天可退,所以破的是"小定",不是"大定"。

最后再来看一眼小米汽车,真挺好看:

alt

...

回归主线。

来一道和「小米」相关的算法原题。

题目描述

平台:LeetCode

题号:1235

你打算利用空闲时间来做兼职工作赚些零花钱。

这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 profit[i]

给你一份兼职工作表,包含开始时间 startTime,结束时间 endTime 和预计报酬 profit 三个数组,请你计算并返回可以获得的最大报酬。

注意,时间上出现重叠的 2 份工作不能同时进行。

如果你选择的工作在时间 X 结束,那么你可以立刻进行在时间 X 开始的下一份工作。

示例 1: alt

输入:startTime = [1,2,3,3], endTime = [3,4,5,6], profit = [50,10,40,70]

输出:120

解释:
我们选出第 1 份和第 4 份工作, 
时间范围是 [1-3]+[3-6],共获得报酬 120 = 50 + 70。

示例 2: alt

输入:startTime = [1,2,3,4,6], endTime = [3,5,10,6,9], profit = [20,20,100,70,60]

输出:150

解释:
我们选择第 1,4,5 份工作。 
共获得报酬 150 = 20 + 70 + 60。

示例 3: alt

输入:startTime = [1,1,1], endTime = [2,3,4], profit = [5,6,4]

输出:6

提示:

序列 DP + 二分

为了方便,我们令 startTimestendTimeendTimeprofitps,同时定义三元组 来代指某份工作。

我们知道,在理想情况下,若能将所有工作排成不重叠的直线,我们便能通过完成所有工作来取得最大收益。

alt

归结到每个工作,我们总有「选择完成该工作」和「选择不完成该工作」两种决策。

「定义 为考虑前 个工作,所能取得的最大收益(注意 不一定被选择完成),为了方便,我们令下标从 开始:」

  • 当不选择该工作时:由于 明确不会产生价值,可知
  • 当选择该工作时:可分为「仅选择完成该工作」或「选择 「考虑」 将该工作接在某个工作后面完成」两种情况:
    • 当「仅选择完成该工作」时,我们有
    • 当「选择 「考虑」 将该工作接在某个工作后面完成」时,我们需要在所有满足「 」中选择最适合的 接在 的前面。 即在所有能够在 开始前顺利结束的 中取最大的 ,此时有

      需要注意:这里的“接在”是指将 纳入考虑,但具体方案中,并不一定选择 来执行(好好想想我们的 状态定义)

最终 为上述三种方案中的最大值,并且最终的 即是我们的答案。

「当我们处理到 时,为了能够「将所有所能拼接在 前面的 归结到一边」并且「所能更新 均被计算」,我们可以通过对所有的 进行右端点(结束时间)进行排升序,并按照从小到大的方式处理每个 。」

alt

此处排序的意义有两点:

  • 由于我们是根据右端点排序,当我们处理到某个 时,由于有 ,因此所能接在 前面(结束时间小于等于 开始时间)的 必然位于 之间;
  • 由于我们对 的定义并不限定了必须选 ,因此在 范围内以 为分割点的数组的具有「二段性」:坐标范围小于等于 均可“接在” 前面。因此我们可通过「二分」来找所能接在 前面的坐标最大的

Java 代码:

class Solution {
    public int jobScheduling(int[] st, int[] et, int[] ps) {
        int n = st.length;
        List<int[]> list = new ArrayList<>();
        for (int i = 0; i < n; i++) list.add(new int[]{st[i], et[i], ps[i]});
        Collections.sort(list, (a, b)->a[1] - b[1]);
        int[] f = new int[n + 10];
        for (int i = 1; i <= n; i++) {
            int[] info = list.get(i - 1);
            int a = info[0], b = info[1], c = info[2];
            f[i] = Math.max(f[i - 1], c);
            int l = 0, r = i - 1;
            while (l < r) {
                int mid = l + r + 1 >> 1;
                if (list.get(mid)[1] <= a) l = mid;
                else r = mid - 1;
            }
            if (list.get(r)[1] <= a) f[i] = Math.max(f[i], f[r + 1] + c);
        }
        return f[n];
    }
}

C++ 代码:

class Solution {
public:
    int jobScheduling(vector<int>& startTime, vector<int>& endTime, vector<int>& profit) {
        int n = startTime.size();
        vector<vector<int>> list(n);
        for (int i = 0; i < n; i++) list[i] = {startTime[i], endTime[i], profit[i]};
        sort(list.begin(), list.end(), [](vector<int> a, vector<int> b)->bool{return a[1] < b[1];});
        vector<intf(n + 100);
        for(int i = 1; i <= n; i++) {
            int a = list[i - 1][0], b = list[i - 1][1], c = list[i - 1][2];
            f[i] = max(f[i - 1], c);
            int l = 0, r = i - 1;
            while (l < r) {
                int mid = l + r + 1 >> 1;
                if (list[mid][1] <= a) l = mid;
                else r = mid - 1;
            }
            if (list[r][1] <= a) f[i] = max(f[i], f[r + 1] + c);
        }
        return f[n];
    }
};

Python 代码:

class Solution:
    def jobScheduling(self, st: List[int], et: List[int], ps: List[int]) -> int:
        n = len(st)
        jobs = [(st[i], et[i], ps[i]) for i in range(n)]
        jobs.sort(key=lambda x: x[1])
        f = [0] * (n + 10)
        for i in range(1, n + 1):
            a, b, c = jobs[i - 1]
            f[i] = max(f[i - 1], c)
            l, r = 0, i - 1
            while l < r:
                mid = l + r + 1 >> 1
                if jobs[mid][1] <= a:
                    l = mid
                else:
                    r = mid - 1
            if jobs[r][1] <= a:
                f[i] = max(f[i], f[r + 1] + c)
        return f[n]

TypeScript 代码:

function jobScheduling(st: number[], et: number[], ps: number[]): number {
    const n = st.length
    const list = new Array<Array<number>>()
    for (let i = 0; i < n; i++) list.push([st[i], et[i], ps[i]])
    list.sort((a,b)=>a[1]-b[1])
    const f = new Array<number>(n + 10).fill(0)
    for (let i = 1; i <= n; i++) {
        const info = list[i - 1]
        const a = info[0], b = info[1], c = info[2]
        f[i] = Math.max(f[i - 1], c)
        let l = 0, r = i - 1
        while (l < r) {
            const mid = l + r + 1 >> 1
            if (list[mid][1] <= a) l = mid
            else r = mid - 1
        }
        if (list[r][1] <= a) f[i] = Math.max(f[i], f[r + 1] + c)
    }
    return f[n]
}
  • 时间复杂度:排序复杂度为 DP 过程共有 个状态需要转移,每次转移需要进行二分,单次复杂度为 。整体复杂度为
  • 空间复杂度:

最后

给大伙通知一下 📢 :

全网最低价 LeetCode 会员目前仍可用!!!

📅 年度会员:有效期加赠两个月!!; 季度会员:有效期加赠两周!!

🧧 年度会员:获 66.66 现金红包!!; 季度会员:获 22.22 现金红包!!

🎁 年度会员:参与当月丰厚专属实物抽奖(中奖率 > 30%)!!

专属链接:https://leetcode.cn/premium/?promoChannel=acoier

更多详情请戳 这里 。

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

欢迎关注,明天见。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2905923.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

短视频文案提取的简单实现

过春风十里&#xff0c;尽荠麦青青。春天总是让人舒坦&#xff0c;而今年的三月&#xff0c;也因为与媳妇结婚十年&#xff0c;显得格外不同。两人奢侈的请了一天假&#xff0c;瞒着孩子&#xff0c;重游西湖&#xff0c;去寻找13年前的冰棍店&#xff08;给当时还是同事的她买…

python超详细知识点汇总整理

1、注释以及编码格式的声明 单行注释&#xff1a;# &#xff08;后面放上被注释的内容&#xff09;多行注释&#xff1a;字符段落的上下加上三引号 举个例子: ‘’’ …‘’’编码格式的声明&#xff1a;#coding:utf-8 或者是 #codingutf-8 2、代码编写格式和一些琐碎说明 同…

机器学习入门:概念、步骤、分类与实践

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

【APP_TYC】数据采集案例天眼APP查_查壳脱壳反编译_③

是不是生活太艰难 还是活色生香 我们都遍体鳞伤 也慢慢坏了心肠 你得到你想要的吗 换来的是铁石心肠 可曾还有什么人 再让你幻想 &#x1f3b5; 朴树《清白之年》 查壳 工具介绍Frida-dexDump Frida-dexDump简介 Frida-dexDump是基于Frida的一个工具&…

layui laydate日期初始化的一些坑

layui laydate日期初始化的一些坑 背景坑一&#xff1a;利用class属性初始化时间控件失败坑二&#xff1a;后加载页面时间控件初始化失败坑三&#xff1a;结束时间需要默认追加23:59:59 背景 在日常开发中&#xff0c;总是会不可避免的用到日期插件&#xff0c;不同的日期插件…

【ENSP】交换机和路由器之间实现静态路由

1.概念 三层交换机只能在Vlanif逻辑口配置iP地址 路由器的每一个端口都是另外一个网段 2.实现方法 交换机允许对应vlan通行&#xff0c;配置vlanif的ip地址&#xff0c;做静态路由 路由器&#xff0c;进接口配置对应的ip&#xff0c;路由器和交换机相连的口&#xff0c;进入他的…

【实战】验证可执行文件可靠性| Windows 应急响应

0x01 简介 相信部分朋友已经看过我们的 《Windows 应急响应手册》了&#xff0c;我们这边也得到部分朋友的正向反馈&#xff0c;包括工具、方法等。 Windows 版的应急响应手册中常规安全检查部分第一版就包含了 30 多个检查项目&#xff0c;按照我们的风格&#xff0c;每个检…

备忘录删除了怎么恢复?解锁4个简单方法

误删除苹果备忘录是一个常见的问题&#xff0c;而且很容易导致我们遗失重要信息的情况。但是&#xff0c;如果您不幸误删了备忘录&#xff0c;也不必过分担心&#xff0c;因为有几种简单的方法可以帮助您恢复这些备忘录。备忘录删除了怎么恢复&#xff1f;在本文中&#xff0c;…

R语言使用dietaryindex包计算NHANES数据多种营养指数(2)

健康饮食指数 (HEI) 是评估一组食物是否符合美国人膳食指南 (DGA) 的指标。Dietindex包提供用户友好的简化方法&#xff0c;将饮食摄入数据标准化为基于指数的饮食模式&#xff0c;从而能够评估流行病学和临床研究中对这些模式的遵守情况&#xff0c;从而促进精准营养。 该软件…

2023年财报大揭秘:下一个倒闭的新势力呼之欲出

3月25日&#xff0c;零跑汽车公布了他们2023年的财报。财报数据显示&#xff0c;零跑亏损了42亿元。恰逢近段时间众多新势力车企皆公布了年报&#xff0c;而亏损也成了大家避不开的话题。那今天就让我们一起盘点一下各个车企的财报吧&#xff01; 2023年财报大揭秘&#xff1a;…

Sip-6002D 双按键SIP对讲求助终端

Sip-6002D 双按键SIP对讲求助终端 一、描述 SV-6002TP是我司的一款壁挂式一键求助对讲终端&#xff0c;具有10/100M以太网接口&#xff0c;支持G.711、G.722音频解码&#xff0c;其接收SIP网络的音频数据&#xff0c;实时解码播放&#xff0c;还配置了麦克风输入和扬声器输出…

UI的设计

一、RGB888的显示 即红色&#xff0c;绿色&#xff0c;蓝色都为8位&#xff0c;即通常说的24位色。可以很好显示各种过渡颜色。从硬件上&#xff0c;R、G、B三基色的连接线各需要有8根&#xff0c;即24根数据线&#xff1b;软件上存储的数据量也需要24位&#xff0c;即3个字节&…

led驱动恒流电源0-10v可控硅调光电源控制芯片SM2318EA

LED驱动恒流电源、0-10V可控硅调光电源以及控制芯片是LED照明系统中重要的组成部分。它们共同协作&#xff0c;实现对LED灯的亮度、颜色等特性的精确控制。 1. LED驱动恒流电源&#xff1a;由于LED的伏安特性是非线性的&#xff0c;且其亮度与电流直接相关&#xff0c;因此需要…

Keil MDK如何主题美化和代码美化

目录 概要 下载地址&#xff1a;Keil MDK主题美化和代码美化 保存插件 配置MDK 使用方法 MDK配色 概要 编写代码时&#xff0c;缩进和括号的使用对于代码的清晰度和可读性至关重要。手动调整这些格式细节不仅费时&#xff0c;还容易出错。幸运的是&#xff0c;有许多工具…

python如何获取word文档的总页数

最近在搞AI. 遇到了一个问题&#xff0c;就是要进行doc文档的解析。并且需要展示每个文档的总页数。 利用AI. 分别尝试了chatGPT, 文心一言&#xff0c; github copilot&#xff0c;Kimi 等工具&#xff0c;给出来的答案都不尽如人意。 给的最多的查询方式就是下面这种。 这个…

JVM篇详细分析

JVM总体图 程序计数器&#xff1a; 线程私有的&#xff0c;每个线程一份&#xff0c;内部保存字节码的行号&#xff0c;用于记录正在执行字节码指令的地址。&#xff08;可通过javap -v XX.class命令查看&#xff09; java堆&#xff1a; 线程共享的区域&#xff0c;用来保存对…

Codeforces Round #818 (Div. 2) A-C

人类智慧 A. 题意&#xff1a;求满足1<a,b<n且lcm(a,b)/gcd(a,b)<3的(a,b)的个数 转化 a/gcd*b*gcd<3 可以划归为1*2 1*1 2*1 3*1 1*3 则可以转变成一个统计倍数问题 #include<bits/stdc.h> using namespace std; using ll long long; using pii pair&…

电脑最高可以装多少内存?电脑内存怎么装?

大家好&#xff0c;我是来自兼容性之家的&#xff01; 通常我们的家用电脑主机有8到16GB的运行内存。 极少数高端用户会使用32至64GB内存。 比较高端的工作站的内存在128GB左右。 同时&#xff0c;家用电脑的硬盘容量约为1TB。 那么你有没有想过一台电脑可以拥有的最大内存量…

Spring Boot 工程开发常见问题解决方案,日常开发全覆盖

本文是 SpringBoot 开发的干货集中营&#xff0c;涵盖了日常开发中遇到的诸多问题&#xff0c;通篇着重讲解如何快速解决问题&#xff0c;部分重点问题会讲解原理&#xff0c;以及为什么要这样做。便于大家快速处理实践中经常遇到的小问题&#xff0c;既方便自己也方便他人&…

氮气柜常用的制作材质有哪些?

氮气柜主要用于存储对湿度敏感或需要在低氧环境中保存的精密部件、电子元器件、化学品、文物等&#xff0c;需要确保柜体的密闭性和内部环境的稳定&#xff0c;以防止氧化、受潮或变质。 常见的材质有冷轧钢板&#xff0c;冷轧钢板通过冷轧工艺使钢材组织更紧密&#xff0c;从而…