据知情人透露,DeepSeek 原计划在五月初发布 R2,现在希望尽早发布,但没有提供具体细节。
这一消息不仅让人对 R2 的性能充满期待,也折射出当前 AI 竞赛的激烈程度。
DeepSeek 作为一家快速崛起的 AI 研究公司,其上一代模型已在开源社区中崭露头角。而 R2 的提前发布计划,似乎暗示着外部竞争压力或内部技术突破的推动。
R2 可能带来的影响
尽管具体细节未明,但我们可以从 DeepSeek 的技术路线和行业趋势推测 R2 的潜在影响。
1. 性能提升
R2 可能会在自然语言处理、推理能力或多模态任务上有所突破。如果能以更低的计算成本实现媲美甚至超越闭源模型的表现(如 GPT-4),它将成为开源社区的一大福音。
2. 生态竞争
R2 的提前发布可能迫使其他公司调整计划。例如,xAI 的 Grok 3 或 Anthropic 的 Claude 3.7 若感受到威胁,可能会加快开发速度。这种连锁反应将进一步推动 AI 技术的整体进步。
3. 开源与商业的博弈
DeepSeek 的开源策略一直是其亮点,但提前发布是否会伴随商业化尝试(如提供 API 服务)尚不得而知。如果 R2 在保持开源的同时推出收费服务,可能会重塑开源模型的盈利模式。
究竟会有什么样的火花?我们拭目以待~
…
回归正题,我们来一道力扣中等题目 设计浏览器历史记录,也是 2025-02-26 的每日一题。
题目描述
你需要设计一个浏览器历史记录功能,类似于浏览器的前进和后退按钮。具体来说,你需要实现一个 BrowserHistory
类,支持以下操作:
BrowserHistory(string homepage)
:用主页 URL 初始化浏览器。void visit(string url)
:从当前页面访问一个新的 URL。新 URL 会被添加到历史记录中,且后续的历史记录将被清除(即无法前进到之前的后续页面)。string back(int steps)
:向后退steps
步,返回当前页面 URL。如果后退步数超过历史记录起始点,则停留在主页。string forward(int steps)
:向前走steps
步,返回当前页面 URL。如果前进步数超过历史记录末尾,则停留在最后一个页面。
示例:
1 | 输入: |
约束:
- (1 \leq homepage.length \leq 20)
- (1 \leq url.length \leq 20)
- (1 \leq steps \leq 100)
- 最多调用 (5000) 次
visit
、back
和forward
。
思路
这道题本质上是一个双向线性历史记录管理问题,需要支持插入新记录、清理后续记录,以及在历史中前后移动。我们可以用一个数据结构来模拟浏览器的历史记录,同时追踪当前页面位置和有效记录的范围。
数据结构选择:
- 一个简单的数组(或列表)可以存储历史记录,记录按访问顺序排列。
- 需要维护三个指针:
cur
:当前页面索引。start
:历史记录的起点(通常是 0)。end
:历史记录的终点(最后一个有效页面的索引)。
操作实现:
- 初始化:将主页作为第一个页面,
cur = 0
,end = 0
。 - visit:追加新 URL 到数组,更新
cur
和end
,并清除后续历史(通过限制end
)。 - back:将
cur
向左移动steps
步,但不超过start
。 - forward:将
cur
向右移动steps
步,但不超过end
。
- 初始化:将主页作为第一个页面,
边界处理:
- 后退时不能超出主页(
cur >= 0
)。 - 前进时不能超出末尾(
cur <= end
)。
- 后退时不能超出主页(
步骤:
使用一个列表存储历史记录,配合 cur
和 end
两个变量:
cur
表示当前页面索引。end
表示最后一个有效页面的索引(新访问会覆盖后续记录)。- 通过简单的索引操作实现
back
和forward
,并在visit
时更新end
。
代码实现
以下是 Python 3 的实现:
1 | class BrowserHistory: |
复杂度分析
时间复杂度:
__init__
:(O(1)),初始化只需存储一个字符串。visit
:(O(n))(最坏情况),当需要清除后续历史时,列表切片操作可能涉及 (n) 个元素((n) 是当前历史长度)。但通常操作数较少,均摊接近 (O(1))。back
:(O(1)),仅更新索引。forward
:(O(1)),仅更新索引。
空间复杂度:
- (O(n)),其中 (n) 是历史记录的总数,受限于调用
visit
的次数(最多 5000)。
- (O(n)),其中 (n) 是历史记录的总数,受限于调用
总结
这道题考察了线性数据结构的设计与操作。通过一个简单的列表和两个指针(cur
和 end
),我们可以高效实现浏览器的历史记录功能。代码简洁且直观,关键在于处理 visit
时的后续历史清除和边界条件。
如果你有其他解法(比如用双指针或栈),或者对某个操作的细节有疑问,欢迎讨论!
力扣专属折扣
力扣免费题目已经有了很多经典的了,也覆盖了所有的题型,只是很多公司的真题都是锁定的。个人觉得如果你准备找工作的时候,可以买一个会员。另外会员很多leetbook 也可以看,结合学习计划,效率还是蛮高的。
现在力扣在每日一题基础上还搞了一个 plus 会员挑战,每天刷题可以获得积分,积分可以兑换力扣周边。
如果你要买力扣会员的话,这里有我的专属力扣折扣:https://leetcode.cn/premium/?promoChannel=lucifer (年度会员多送两个月会员,季度会员多送两周会员)