ARTS 0906: 辅助栈记录每层最小值、OSI 模型从未真正落地

每周完成一个 ARTS: 至少做一个 leetcode 的算法题、阅读并点评至少一篇英文技术文章、学习至少一个技术技巧、分享一篇有观点和思考的技术文章。(也就是 Algorithm、Review、Tips、Share 简称 ARTS)

Algorithm

LeetCode 155. 最小栈

image-20260906012935120

第一版:单个 minIndex

最开始的想法是用一个 minIndex 记录当前最小值在 list 中的下标。push 的时候比较并更新 minIndex,getMin 直接通过 minIndex 取值。

问题:pop 的时候如果弹出的恰好是最小值,就需要重新遍历/排序找新的最小值,做不到 O(1)。

而且只记录「倒数第二小」也不够,连续 pop 多次,每次弹出的都可能是当前最小值,需要第三小、第四小……本质上需要记住每一层的最小值。

第二版:辅助栈

用一个辅助栈 minStack,和主栈同步 push/pop。minStack 每一层存的是「从栈底到当前这一层为止的最小值」。这种方式是我问 AI 才知道的,随然多了一个 ArrayList 但是 push 和 getMin 都是 O(1)

操作主栈 stack辅助栈 minStack
push(5)[5][5]
push(3)[5, 3][5, 3]
push(7)[5, 3, 7][5, 3, 3]
push(1)[5, 3, 7, 1][5, 3, 3, 1]
pop()[5, 3, 7][5, 3, 3]
getMin()—栈顶 = 3 ✓

关键:push 时辅助栈压入 min(新值, minStack 栈顶);pop 时两个栈一起弹;getMin 直接读辅助栈栈顶。

最终代码:

▼
java
复制代码
import java.util.ArrayList; class MinStack { private final ArrayList<Integer> stack; private final ArrayList<Integer> minStack; public MinStack() { stack = new ArrayList<>(); minStack = new ArrayList<>(); } public void push(int value) { stack.add(value); if (minStack.isEmpty() || value <= minStack.get(minStack.size() - 1)) { minStack.add(value); } else { minStack.add(minStack.get(minStack.size() - 1)); } } public void pop() { stack.remove(stack.size() - 1); minStack.remove(minStack.size() - 1); } public int top() { return stack.get(stack.size() - 1); } public int getMin() { return minStack.get(minStack.size() - 1); } }

复杂度:

  • 时间:push / pop / top / getMin 全部 O(1)
  • 空间:O(n),辅助栈和主栈等长

需要注意的点:

  1. push 时先 add 再更新 minIndex(顺序反了会导致 index 指错)
  2. pop 时注意 remove 之后 size 已经变了,不要用变化后的 size 去操作另一个栈
  3. 单个 minIndex 方案在 pop 最小值时需要重新遍历,无法做到 O(1)

Review

文章:https://www.practicalnetworking.net/stand-alone/the-truth-about-the-osi-model/

文章指出 OSI 模型从未在实际网络中被广泛使用,当年因委员会争论过多而迟迟无法落地,反而是更简洁的 TCP/IP 模型先行投产并成为事实标准。但 OSI 作为教学工具仍有价值,关键在于教法要对:应把每一层看作「抽象层」,关注其承担的职责(如 L3 负责端到端、L4 负责服务到服务),而不是死记硬背层名和定义。各职责之间并非严格按层序执行,实际协议中顺序可能交叉。作者建议未来全面转向 5 层 TCP/IP 模型,但现阶段教育和认证体系仍绑定 OSI,短期内难以脱离。

Tips

1)修改 commit 信息

1、查看提交历史,找到需要修改的 commit 的前一个 commit id:

▼
bash
复制代码
git log

2、执行交互式 rebase 进入编辑:

▼
bash
复制代码
git rebase -i <commit-id>

按 i 进入编辑模式,将目标提交前的 pick 改为 edit,按 Esc 输入 :wq 保存退出(同 Vim 逻辑)。若仅修改提交信息,直接执行 git commit --amend。

3、修改文件内容(如删除不必要的信息等),修改完成后重新提交(也可直接在 IDE 中操作):

▼
bash
复制代码
git add . git commit --amend

4、继续执行后续 rebase 流程:

▼
bash
复制代码
git rebase --continue

5、强制推送到远程(使用比 --force 更安全的 --force-with-lease):

▼
bash
复制代码
git push --force-with-lease <remote> <branch>

6、若推送遇到登录认证失败,使用 gh 唤起浏览器完成授权:

▼
bash
复制代码
gh auth refresh -h github.com

7、查看 GitHub 登录状态,确认登录成功:

▼
bash
复制代码
gh auth status

2)不让 Cursor 进行 commit 的时候携带上 "Co-authored-by" 信息,之需要修改配置(取消这个 Commit Attribution):

image-20260906185938374

Share

文章:https://www.gatesnotes.com/a-turbulent-ai-era-and-critical-choices-to-make

Bill Gates 在 2026 年 8 月发表了这篇长文,核心论点是:AI 有可能成为「有史以来最伟大的均衡器」,但前提是我们现在就做出正确的选择。

Gates 对 AI 的态度始终是乐观的。他看好 AI 在医疗、教育、农业、清洁能源和科学研究等领域的巨大潜力,认为 AI 能让优质资源触达更多人。但这次他的语气比以前更务实——他第一次表示希望技术的发展速度能稍微慢一点,给社会留出准备时间。

文章最有价值的部分是他提出的几个建设性方案:

  1. 「人类保留」岗位:在医疗护理等需要人类情感和判断力的领域,应该有意识地保留人类角色,而不是全部交给 AI。
  2. 治理框架:呼吁建立新的国内和国际组织来管理 AI 风险,没有全球框架的话贫富差距只会加大。
  3. 经济政策:讨论了对 AI 和机器人征税的可能性,用来缓解大规模自动化带来的社会冲击。

这篇文章不是在贩卖焦虑,而是在说:AI 本身是中性的,关键在于我们怎么选

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
leikooo
作者分享
最近看了一个视频叫「被 Vibe Coding 抚平的大脑褶皱,还能救回来吗?」,聊的是 AI 时代学编程的困境,感觉说的挺好的,给鱼友们分享一下。 视频中提到现在学编程和以前最大的区别是,以前卡住了你只能自己想、查文档、翻 Stack Overflow,这个过程虽然痛苦,但你的脑子确实在转。现在有了 AI,卡住的第一反应就是打开 ChatGPT 问一句,代码瞬间就出来了,跑通了,感觉自己搞定了。但问题是,你的大脑在这个过程中几乎没有参与。视频里提到一个实验,有个学生读完题 10 秒钟就放弃思考去问 AI 了,事后还觉得是自己独立完成的。这就是 AI 带来的最大陷阱——你以为自己在学,其实只是在看AI 表演。 视频基于一项研究,总结了学编程时容易掉进去的 8 种思维陷阱。研究表明光是知道这些陷阱的存在,就能明显提升学习效果。前 5 种是编程学习中一直存在的,后 3 种是 AI 时代新出现的: 1)Forming(构建错误):你理解了问题,但用了错误的方法去解决。比如题目要你判断正数多还是负数多,你写了个求和的逻辑,方向对了路走偏了。 2)Dislodging(思维固着):你已经意识到方法不对,但就是转不过弯来换思路,反复在错误的方向上修修补补。 3)Assumption(假设偏差):你完美地解决了一个问题,但不是题目要求的那个问题。比如题目要处理任意个数字,你只处理了四个。4)Location(定位缺失):跳过了关键步骤就开始写代码,感觉快写完了,测试的时候才发现漏了循环或数据结构这种核心东西,得大改。 5)Achievement(成就幻觉):写了一大堆代码,明知道有问题但不愿意推倒重来,总想着再改改就好了,结果越改越乱。 6)Progression(进度错觉):AI 帮你写出了超出你水平的代码,作业都能交,但基础可能已经落后好几周了,自己完全不知道。这个是最危险的,等到面试或者独立写代码的时候才发现脑子里是空的。 7)Interruption(思维中断):你正在集中精力思考,AI 自动补全突然弹出来一段代码,思路直接被打断。有意思的是实验中表现好的学生大多直接忽略了 AI 的补全建议。 8)Mislead(误导跟随):信了 AI 给的一个看似合理但方向错误的建议,白白浪费时间走弯路。 大佬给出的建议是,遇到问题先别急着问 AI,给自己至少五分钟独立思考。卡住、沮丧、想摔键盘,这些不是你学不会的信号,这就是解决问题时的正常感受。AI 生成的代码跑通之后,试着关掉 AI 自己从零写一遍,能写出来才算真的会了。最重要的是分清场景,工作赶进度可以用 AI 提效,但练习和学习的时候请把「拐杖」放下,自己走。别让 AI 替你长脑子。
7
ARTS 0927: 单栈逐层展开嵌套字符串、包管理器与 Agent 沙箱本质同源与单次前向传播复刻极速决策模型
7
祝编程导航的鱼友们中秋快乐,愿代码顺利、生活如意,月圆人团圆,所愿皆可期!
13
ARTS 0913: 双栈互补实现队列、CIDR 聚合化解路由膨胀与 AI 作弊串通绝非偶然 Bug
8
微信爆出 P0 级漏洞😱,接到来电就中招,碰都不用碰手机。 怎么中招的? 黑客只需要是你的微信好友,然后给你打一个语音或视频通话,好了已经搞定了,你已经被黑了。 有多离谱? 完全不需要接这个电话。手机锁着屏扔在桌上,你看都没看一眼,只要响了几秒钟,恶意代码就已经在后台跑起来了。 黑客瞬间拿下你整个微信:翻你聊天记录、看你隐私、用你的身份给别人发消息。 更恐怖的是,你的微信紧接着会变成"丧尸",黑客可以自动给通讯录里所有好友挨个打电话,把他们也感染一遍。每个受害者又立刻变成新的传播者,像病毒一样指数级扩散...,不敢想象如果被利用了,理想情况下那需要多久就能扩散到全国的用户呢?30 分钟左右 好消息是这个 bug 微信团队已经知道了这个 bug ,坏消息这个 bug 好像不是微信团队发现的 文章来源:https://calif.io/research/weworm
7
下载 APP