十五、状态模式
State Pattern 有限状态机 简称状态机, 由三部分组成:状态、事件、动作。事件触发状态转移,执行动作(非必须)。 状态机实现方式一:分支逻辑法 就是各种if else,switch case。判断不同的状态,遇到不同的事件,执行不同的操作,例如改变状态,执行动作。适用于简单的场景,毕竟不要过度设计。 状态机实现方式二:查表法 状态机有两…
LeetCode:最长回文子串_5
思路 算是入门题了,运用双指针即可。 题目 给你一个字符串 s,找到 s 中最长的回文子串。   示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。 示例 2: 输入:s = "cbbd" 输出:"bb" 示例 3: 输入:s = "a" 输出:"a" 示例 4: 输入:s = "ac" 输出:"a…
Leetcode:验证回文串_125
思路 判断是否为回文字符串,最开始想到的是找到中点,利用双指针往外扩。后来发现直接从头尾往中间收就行了。 有两个注意点 本题有只判断字符和数字,其他的符号不管 大小写不敏感 在leetcode评论区学到个技巧 题目 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义为有效的回文串。  …
联想NAS A1调研
优点 网速快 相比百度云,上传下载速度快,上传网速一般在10M到50M左右,下载50-100M,看个人网络 BUT:阿里云盘网速也快 功耗 每月耗电:30(天)*18(每天运行时间8点-24点)*5(瓦)/1000=2.4(度) 电费:2.4*0.7(电费单价)=1.68(元) 很不错,比其他NAS产品好多了 无风扇 发热量不大,散热不成问题 噪音…
LeetCode:K个一组翻转链表_25
思路 反转链表II_92的进阶,主要是利用递归思想,拆解重复问题。 题目 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 进阶: 你可以设计一个只使用常数额外空间的…
LeetCode:反转链表II_92
思路 这种题就很烦,你说它难吧,它就是在反转链表_206的基础上增加了个数量限制。你说它不难吧,边界问题折磨死你。提交几次,调试半天才AC。 题目 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后…
十四、桥接模式
Bridge Design Pattern 两种理解方式 GoF的《设计模式》 桥接模式定义为:让抽象和实现解耦,让他们可以独立变化。这里的实现不是指语法上的实现接口、实现抽象方法,抽象也不是指接口或者抽象类。而是从业务的角度来定义的。例如JDBC定义了数据库访问层的规范,mysql数据库驱动实现了JDBC定义的规范,这里的JDBC和MySQL驱动…
十三、门面模式
Facade Design Pattern 前言 之前遇到过一个场景,绩效分为标注绩效,质检绩效,不同的公司展示不同的绩效。例如运营公司展示标注绩效,质检绩效;标注公司展示标注绩效;为了保证接口的单一职责,可复用性强,就把接口粒度控制得很小。导致的问题是,接口调用方需要根据不同情况调用一个或多个绩效接口,接口易用性差。 增加外观类 在现有基础上,“…
LeetCode:相交链表_160
思路 这题的解法有些独特,可能是我太久没接触几何相关的问题了,要是放在初中,应该还是能想出来。 两个链表都需要遍历,很容易想到双指针。先考虑简单情况,假如两个链表长度相等。双指针同时往前走,每走一步判断下是否相等。 假如链表长度不等,双指针同时往前走就不行了,即使调整速度也不好使。我们的目的是判断两个指针是否相等,链表相交部分长度是相等的,如果末端…
LeetCode:反转链表_206
思路 基础的递归思维,再一次用到了虚拟头结点。 题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head = [1,2] 输出:[2,1] 示例 3: 输入:head = [] 输出:[] 提示: 链表中节点的数目范围是…