ARTS 0906: 辅助栈记录每层最小值、OSI 模型从未真正落地与与其被动等待被颠覆不如主动设计规则

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

Algorithm

LeetCode 155. 最小栈

第一版:单个 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):

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 本身是中性的,关键在于我们怎么选。与其被动等待被颠覆,不如主动设计规则让技术为更多人服务。

相关推荐
Shadow(⊙o⊙)1 小时前
数据链路层ARP协议、NAT路由技术、代理服务器、内网穿透、内网打洞、交换机+集线器
网络·网络协议·tcp/ip
武子康1 小时前
从声学信号到工具阻断:实时语音安全决策门的系统设计
人工智能·llm·agent
旖旎夜光1 小时前
【LangChain实战】LangChain 学习笔记(二):结构化输出、流式传输与消息管理
人工智能·笔记·python·学习·ai·langchain
青瓦梦滋1 小时前
Linux高级IO
linux·运维·服务器·网络·网络协议·tcp/ip
醍醐实验室1 小时前
推理链中的 Token 冗余与剪枝:消除无意义语气词对注意力权重的稀释
人工智能
不会就选b2 小时前
数据结构之数&&二叉树(一)
数据结构
白狐_7982 小时前
408 数据结构|KMP算法核心:为什么不用主串回退
数据结构·算法
努力努力再努力wz2 小时前
【Docker入门系列】:从架构演进到容器化:一文建立 Docker、虚拟化与 Namespace 的底层心智模型
运维·开发语言·数据结构·c++·docker·容器·架构
梦想的颜色2 小时前
2026 年 9 月主流 AI 视频生成模型横向硬核测评:价格、能力定位、质量、Agent 工作流适配
人工智能·aigc·大模型测评·ai视频大模型·minimax h3·seedance 2.5