obsidian-computer

我的误区整理

1. 不能一再强调设计模式,设计模式不是目的是手段,是为了吧经常变的地方,把要变动的逻辑减少,一部分固定起来这就是设计模式,(这跟函数一样,不能莫名其妙就新建一个函数,即使只调用一次) 所以优先考虑朴…

最后更新 2026年9月12日
  1. 不能一再强调设计模式,设计模式不是目的是手段,是为了吧经常变的地方,把要变动的逻辑减少,一部分固定起来这就是设计模式,(这跟函数一样,不能莫名其妙就新建一个函数,即使只调用一次) 所以优先考虑朴素实现。
  2. 为了避免考虑+1问题,所有问题全部左闭右开[l,r),长度就是r-l,空区间就是l==r,拼接[a,b)+[b,c)=[a,c) 要给每一个变量精确的语义。不要在脑中模拟
❌ "i 用来遍历数组" —— 这是动作描述,验证不了任何东西
❌ "i 大概在已处理和未处理的分界附近" —— 模糊,±1 说不清
✅ "每次循环开始时,[0, i) 的元素已写入结果,i 指向第一个未处理元素"
  1. 写出来的东西要为自己负责,不能说边界条件就不考虑。 日后在真实场景中如果我遇到了边界条件,比如之前的携程汽车票订票,因为网络问题,同步错误,耽误行程。所以我们要为自己写出来的代码负责;复习记录清除,可能边界小众情况都有人会遇到,所以一定要照顾到所有人
  2. 向上取整 5/2=3 6/4=2 8/2=4 怎么写呢
def div(num1,num2):
	return (num1+num2-1) // num2
  1. python的sorted(iterable,key,reverse) reverse=False为升序,后面两个为关键字参数
  2. 几个数据结构区分
数据结构核心机制元素进出规则典型时间复杂度适用场景
栈 (Stack)后进先出 (LIFO)仅单端(栈顶)进出Push/Pop: O(1),查最值: O(n)括号匹配、逆波兰表达式、递归调用模拟
单调栈 (Monotonic Stack)栈内元素保持单调递增/递减栈顶进出,压栈前弹掉破坏单调性的元素均摊 Push/Pop: O(1)寻找下一个更大/更小元素、柱状图最大矩形
双端队列 (Deque)两端均可快速操作头尾两端均可进出两端 Push/Pop: O(1),查最值: O(n)需要两端读写的滑动窗口、BFS 双向搜索
单调队列 (Monotonic Deque)队内元素单调,头删尾插队尾维护单调性,队头淘汰过期元素均摊操作: O(1),查最值: O(1)固定/变长滑动窗口最值、区间 DP 优化
优先队列 / 堆 (Priority Queue / Heap)完全二叉树,堆顶始终是最值任意顺序插入,仅堆顶弹出最值Push/Pop: O(log n),查最值: O(1)Top-K 问题、Dijkstra 最短路、合并 K 个有序链表
  1. python break只会跳出内层循环 for/while ... else... 当且仅当while或者for循环从头到尾跑完,没有被break的时候才会执行else代码。

  2. ssh -L 端口号:本机回环地址:端口号 用户名@公网ip ssh -L 18802:127.0.0.1:18802 ubuntu@110.xx.xx

  3. nonlocal在内层函数使用修改外层函数;global找的是模块级全局变量

  4. git分支注意主分支master,main 设置主分支不同的时候会产生冲突

git branch -m master main  # 改名
git branch --set-upstream-to=origin/main main # 重新设置远端上游
git pull # 拉取合并 fetch+merge
  1. dp中有的时候需要多开数组,因为0可能也有意义:比如空串。

反向链接(0)

还没有笔记链接到这里。在 Obsidian 里用 [[笔记名]] 引用它,这里就会出现,关系图谱上也会多出一条连线。

评论

关系图谱

AI 开发包管理学习计划对于矩阵的理解我的误区整理根目录

On this page

No Headings