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