内卷,国人与生俱来的能力
最近有几个新闻,串来一起看,会很有意思。
一是字节跳动出品的「豆包」大模型的发布,能打且击穿行业底价,比行业价格低了 99%。

价格战打响了第一炮之后,一周不到,各大厂商纷纷跟进,阿里的通义千问降价 97%,百度则直接宣布两款主力模型免费。
看完一则新兴领域进入价格战的新闻后,再看一则关于国产新能源的新闻。
众所周知,国产新能源赛道已处于价格战的后期,淘汰战的中期。
在进入 4 月之前,无论是资本市场还是大众印象中,蔚小理三家中,都是理想领跑,小鹏最危险。
结果过去俩月,理想股价(美股)下跌超 15%,小鹏(美股)则上涨 12%。
理想最近还宣布裁员 18%。
国产新能源形势被彻底翻转,可见在内卷赛道中,犯一个错就会掉队,犯两个错可能直接没了。
第三则新闻,是关于民生。
多地同时发布网约车行业预警,称运力饱和,新手司机日接单量在 15 单左右,日营收在 200 出头,除去成本后基本没有收入。

背后原因自然是社会就业压力大,越来越多劳动力涌入「网约车」、「外卖」和「快递」这样的体力型短平快行业。
但任何行业面临饱和都只有一个结果:大多数人都挣不到钱。
以后什么「实在不行就去开滴滴/跑美团/送快递」的玩笑可不兴开了,退路要被卷没了。
三则新闻,看着没有关联。
但从行业阶段来分析,是「高新领域开始搞价格战」,是「白热化赛道格局变化」,更是「临时性短平快赛道挤满了人」。
这些新闻的角色都代表了「最聪明/最有资源/最有商机」和「最努力/最普通」的人,但都无一例外走向了统一结果:内卷。
可见,有些能力是刻在民族 DNA 中的。
...
回归主线。
来一道和「字节跳动」相关的题目。
题目描述
平台:LeetCode
题号:1441
给你一个数组 target
和一个整数 n
。
每次迭代,需要从 list = { 1 , 2 , 3 ..., n }
中依次读取一个数字。
请使用下述操作来构建目标数组 target
:
-
"Push"
:从list
中读取一个新元素, 并将其推入数组中。 -
"Pop"
:删除数组中的最后一个元素。
如果目标数组构建完成,就停止读取更多元素。
题目数据保证目标数组严格递增,并且只包含 1
到 n
之间的数字。
请返回构建目标数组所用的操作序列。如果存在多个可行方案,返回任一即可。
示例 1:
输入:target = [1,3], n = 3
输出:["Push","Push","Pop","Push"]
解释:
读取 1 并自动推入数组 -> [1]
读取 2 并自动推入数组,然后删除它 -> [1]
读取 3 并自动推入数组 -> [1,3]
示例 2:
输入:target = [1,2,3], n = 3
输出:["Push","Push","Push"]
示例 3:
输入:target = [1,2], n = 4
输出:["Push","Push"]
解释:只需要读取前 2 个数字就可以停止。
提示:
-
-
-
-
target
严格递增
模拟
根据题意进行模拟即可。
每次我们将当前处理到 i
压入栈中(往答案添加一个 Push
),然后判断当前处理到的 i
是否最新的栈顶元素
是否相同。
若不相同则丢弃元素(往答案添加一个 Pop
),若存在则将指针 j
后移,直到构建出目标答案。
Java 代码:
class Solution {
public List<String> buildArray(int[] target, int n) {
List<String> ans = new ArrayList<>();
int m = target.length;
for (int i = 1, j = 0; i <= n && j < m; i++) {
ans.add("Push");
if (target[j] != i) ans.add("Pop");
else j++;
}
return ans;
}
}
C++ 代码:
class Solution {
public:
vector<string> buildArray(vector<int>& target, int n) {
int m = target.size();
vector<string> ans;
for (int i = 1, j = 0; i <= n && j < m; i++) {
ans.push_back("Push");
if (target[j] != i) ans.push_back("Pop");
else j++;
}
return ans;
}
};
Python3 代码:
class Solution:
def buildArray(self, target: List[int], n: int) -> List[str]:
ans = []
m, i, j = len(target), 1, 0
while i <= n and j < m:
ans.append("Push")
if target[j] != i:
ans.append("Pop")
else:
j += 1
i += 1
return ans
TypeScript 代码:
function buildArray(target: number[], n: number): string[] {
const ans = new Array<string>()
const m = target.length
for (let i = 1, j = 0; i <= n && j < m; i++) {
ans.push("Push")
if (target[j] != i) ans.push("Pop")
else j++
}
return ans
}
-
时间复杂度: -
空间复杂度:
最后
给大伙通知一下 📢 :
全网最低价 LeetCode 会员目前仍可用 ~
📅 年度会员:有效期加赠两个月!!; 季度会员:有效期加赠两周!!
🧧 年度会员:获 66.66 现金红包!!; 季度会员:获 22.22 现金红包!!
🎁 年度会员:参与当月丰厚专属实物抽奖(中奖率 > 30%)!!
专属链接:leetcode.cn/premium/?promoChannel=acoier
我是宫水三叶,每天都会分享算法知识,并和大家聊聊近期的所见所闻。
欢迎关注,明天见。
更多更全更热门的「笔试/面试」相关资料可访问排版精美的 合集新基地 🎉🎉