- 博客(14)
- 收藏
- 关注
原创 Head First 设计模式笔记 4.工厂模式
这篇博客记录了`new`操作符新建对象不够灵活的问题,通过一个披萨系统讲解了简单工厂,工厂方法模式,抽象工厂模式。并对依赖倒置原则进行了简单的说明。
2020-12-31 20:50:29 213
原创 剑指 Offer 07. 重建二叉树
先序遍历顺序[根节点|左子树|右子树]中序遍历顺序[左子树|根节点|右子树]例如题目中前序遍历划分 [ 3 | 9 | 20 15 7 ]中序遍历划分 [ 9 | 3 | 15 20 7 ]基于这两个序列的性质,我们可以设计如下算法按序访问前序遍历序列,得到根节点root在中序遍历序列查找root,得到[左子树,root,右子树]根据2中得到的左右子树长度,可以将前序遍历序列划分为[root,左子树,右子树]这里2中查找root的方法有两种,一种是直接按序查找中序遍历序列,时间复杂
2020-12-31 11:40:15 85
原创 Head First 设计模式笔记 3.装饰者模式
这篇博客简要通过一个订单系统案例,各种调料装饰饮品,最后计算咖啡价格。由此介绍了对**扩展开放-对修改关闭**的设计原则和**装饰者模式**的基本概念,它的基础类图,最后用设计者模式将调味料作为装饰者,将饮料作为被装饰者。解决了这一问题并且实现了对应代码。
2020-12-30 15:46:59 314
原创 Head First 设计模式笔记 2.观察者模式
**观测者模式**定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新。这里简要写一下为何使用观察者模式,如何实现以及它在Java中的内置类。
2020-12-30 10:54:41 152
原创 剑指 Offer 06. 从尾到头打印链表
分析没有啥好说的,三种解法,这里只写第一种逆序操作基本上就是堆栈了。遍历List,将其数据压到栈中。再将栈中的数据弹出到数组,完。当然,也可以两次遍历List,第一次遍历得到list的大小,分配对应大小的数组,第二次遍历,倒序地将数插入数组即可。基于递归基于堆栈/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * Lis
2020-12-30 09:31:47 106
原创 剑指 Offer 05. 替换空格
剑指 Offer 05. 替换空格函数搞定用String的replaceAll函数class Solution { public String replaceSpace(String s) { return s.replaceAll(" ", "%20"); }}基于字符串加法的解粗暴的解法直接初始化一个空的目标串res,遍历源串每个元素s若s不为空格直接复制,res+=sres += sres+=s否则,res+="%20"res += "\%20"r
2020-12-30 08:51:04 88
原创 剑指Offer 不修改数组找出重复的数字
acwing链接这里题目要求不修改原来的数组,并且空间复杂度要求为O(1)O(1)O(1)。这里可以用二分查找的方法。设leftleftleft是搜索范围的开始,rightrightright为搜索范围的结束。midmidmid为它们的中间值统计数组中[left,mid][left, mid][left,mid]之间数字的次数cntcntcnt,与left和right之间的数字个数mid−left+1mid- left + 1mid−left+1进行比较。left=rightleft = right
2020-12-29 09:54:36 131
原创 剑指 Offer 04. 二维数组中的查找
这道题有三种解法暴力算法,直接遍历所有元素,时间复杂度为O(n2)O(n^2)O(n2),空间复杂度为O(1)O(1)O(1),没有利用到从左到右和从上到下递增的特性,是我们的下界从右上角开始遍历如果目标值等于当前值,返回True如果目标值小于当前值,则向左移动,即行数-1如果目标值大于当前值,则向下移动,即列数+1最后的算法复杂度为O(m+n)O(m + n)O(m+n),空间复杂度为O(1)O(1)O(1),只用考虑数组的行数和列数的增减,比较方便。/*1.暴力算法,直
2020-12-28 10:08:25 74
原创 剑指 Offer 03. 数组中重复的数字
leetcode题目链接 剑指 Offer 03. 数组中重复的数字这里有三种方法:利用排序,根据数组的每个元素是否与相邻的元素相等,来判断重复值。时间复杂度O(nlogn)O(nlog n)O(nlogn),空间复杂度为O(1)O(1)O(1)利用哈希表或者数组记录每个元素的次数,一旦次数大于1,则返回该元素。时间复杂度和空间复杂度均为O(n)O(n)O(n)原地置换法。以上都没有利用到数组的特性,数组元素大小都在0~1之间。这里我们采用原地置换的方法,将每个元素调整到对应的位置。时间复杂度和为
2020-12-27 09:46:06 64
原创 模态逻辑中的必然和可能
最近复习高级数理逻辑,抽空写了一下个人对于模态逻辑中关于必然和可能的理解,由于是考前突击的所以会有各种问题,有问题欢迎大家指出。
2020-12-21 09:45:17 3620 7
原创 leetcode cannot find symbol [in __Driver__.java]
在leetcode上面刷题的时候,遇到了这么个Bugn个骰子点数和error: cannot find symbol [in Driver.java]double[] ret = new Solution().dicesProbability(param_1);^symbol: method dicesProbability(int)location: class Solution后来发现是主函数的名字被我改了,少打了一个y,????class Solution { public
2020-12-13 09:42:08 8096 4
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人