字符串这里如果用 python 写,会跳过很多算法的思想,因为 python 就算不调用库函数,用列表存储字符串也是非常的方便,不需要像 C++ 那样各种双指针扩写。最麻烦的应该是子字符串匹配算法,也就是大名鼎鼎的 KMP 算法,这个算法网上已经有很多教程了,我把我看过的比较好的链接都放在这里。
KMP 算法
大约 2 分钟
那些真正塑造我们的,往往没有被写进简历里
字符串这里如果用 python 写,会跳过很多算法的思想,因为 python 就算不调用库函数,用列表存储字符串也是非常的方便,不需要像 C++ 那样各种双指针扩写。最麻烦的应该是子字符串匹配算法,也就是大名鼎鼎的 KMP 算法,这个算法网上已经有很多教程了,我把我看过的比较好的链接都放在这里。
有关链表的基础结构,我已经写在了博客的数据结构栏目里,具体的 C++ 代码可以查看仓库。ref
链表里面涉及的算法主要是双指针和递归。
链表数据在内存里不是连续分布的,而是离散分布,通过指针指向另外一个内存地址。也就是说,我只要知道了一个链表头结点的地址,我就能依次拎起整个链表,而不需要像数组那样,把整个数据块都告诉我。但是也由于链表的指针特性,导致链表只能单向查找 (或者构建双向链表实现双向的查找),链表查找数据的时间复杂度达到了O(n)。
装机小白也要开始学习台式机的 diy 了,但是具体的装机还得到了浙大再搞,否则到时候搬箱倒柜的真是个麻烦事。
这两天在学习装机基础,我是完全不懂的新手小白,所以下面内容会很基础。
项目 | 主流厂家 | 型号区分 | 相关链接 | 常见参数 | 备注 |
---|---|---|---|---|---|
显卡 | 显卡天梯图 | 频率、显存、功耗(注意功耗要和电源匹配) | |||
CPU | CPU 天梯图 | 核心数、线程、IPC(效率)、频率 | |||
主板 | 分类:ATX 板型(大板)、MATX 板型(中板)、ITX 板型(小板) | - | 芯片组型号 | 芯片组决定主板档次 | |
内存条 | - | - | - | 容量、频率(>2666H 要开启主板 XMP) | 能双不单,能二不四 |
固态硬盘 | - | 接口、协议、颗粒 | 机械硬盘就不单拎出来细说了,没啥可以写的 | ||
电源 | 海韵、振华、全汉、华硕、银欣等 | - | FCPPOWERUP 极电魔方电源匹配图 | 瓦数!要和 CPU 和显卡匹配 | 瓦数要仔细挑选,电源一炸整台机报废 |
散热器 | 水冷、风冷 | 挑选参考德柱视频的建议 | |||
机箱 | - | - | - | - | 注意主板兼容性、显卡兼容性、散热器兼容性、硬盘位数量、机箱散热 |
散热风扇 | - | 大 4D、小 3pin、小 4pin 接口风扇(推荐) | - | - | - |
二分查找的模板代码:
class Solution:
def search(self, nums: List[int], target: int) -> int:
left, right = 0, len(nums) - 1 # 定义 target 在左闭右闭的区间里,[left, right]
while left <= right:
middle = left + (right - left) // 2
if nums[middle] > target:
right = middle - 1 # target 在左区间,所以 [left, middle - 1]
elif nums[middle] < target:
left = middle + 1 # target 在右区间,所以 [middle + 1, right]
else:
return middle # 数组中找到目标值,直接返回下标
return -1 # 未找到目标值