自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 收藏
  • 关注

原创 2023年3月9日-水,需要更多的水

NewBing 帮我写一份给学生的寄语,希望他能努力坚持打游戏,不要浪费自己的青春去看书学习

2023-03-09 12:42:52 108 1

原创 2022年5月22日-Java的结语

没什么好写的,把平时记得tips放上来作为这一章的句号吧!Servlet在一个组件转发给另外一个组件之前,通过response输出的响应内容是没有意义的。在转发之前的通过out对象输出的内容最终不会输出到浏览器,这是由于RequestDispatcher在转发之前清空了输出缓冲区。但如果在转发之前输出的信息超出了缓冲区,或者调用了out对象的flush()方法,此响应内容已经输出到了客户端(称之为响应信息已提交),此时如果实施转发操作会抛出运行时异常。数据库String url="jdbc:m

2022-05-22 18:13:02 197

原创 2022年5月22日-Taylor级数的python实验

Taylor级数的python实验引言众所周知,对于任意一个函数,我们可以选用一组基函数拟合这个函数。什么,你不知道!好吧,没有关系,这是一个很简单的东西,相信在我的解释下,你很快就懂了!泰勒级数高等数学里我们学习了一个叫Taylor公式的玩意,即:f(x)=f(x0)0!+f′(x0)1!(x−x0)+f′′(x0)2!(x−x0)2+...+f(n)(x0)n!(x−x0)n+Rn(x)f(x)=\frac{f({{x}_{0}})}{0!}+\frac{{{f}^{'}}({{x}_{0}

2022-05-22 18:04:58 1004

原创 2021年11月12日-猜数字大小 II

375. 猜数字大小 II首先,拿到题目先自己写几个例子试一试。比如需要求猜 1 - 5 之间的最小金额,怎么算?其实可以这么想,我先随便才一个数,比如说 2 吧!那么这时其实就变成了两道规模更小的问题,即求猜出 1 - 1 之间数字的最小金额和猜出 3 - 5 之间数字的最小金额是不是就变成了一个递归问题了class Solution { public int getMoneyAmount(int n) { // 备忘录,做剪枝用 int[][] mem

2021-11-12 15:33:41 244

原创 2021年11月11日-K个逆序对数组

629. K个逆序对数组使用动态规划求解,dp[i][j] 表示包含 1 - i 的数字的序列并且刚好拥有 j 个逆序对的个数所以就有递推公式 dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1] + … + dp[i - 1][k]在 dp[i - 1][k] 的情况下,加上数字 i,所能构成的逆序对最多为 k + i - 1 个,所以 k + i - 1 >= j那么 k = Math.max(j + 1 - i, 0) class S

2021-11-11 11:23:04 212

原创 2021年11月3日-接雨水 II

接雨水 II首先将最外层当作边界从最低的边界入手,看它与之相邻的方格是否能盛水如果能盛水,哪这个方格最终盛水的高度必然已经确定了将方格盛水后的高度当成新的边界重复 2 - 5 直至全部的方格都成为边界class Solution { public int trapRainWater(int[][] heightMap) { int n = heightMap.length; int m = heightMap[0].length; in

2021-11-03 10:30:29 60

原创 2021年10月30日-只出现一次的数字 III

001. 只出现一次的数字 III解法一:哈希表class Solution { public int[] singleNumber(int[] nums) { HashMap<Integer, Integer> map = new HashMap<>(); int[] result = new int[2]; for (int i = 0; i < nums.length; i++) { In

2021-10-30 10:47:50 87

原创 2021年10月27日-删除无效的括号

301. 删除无效的括号回溯 + 剪枝,懂的都懂。我觉得这种困难提没必要做,纯粹浪费我的时间(‾◡◝)public class InvalidParentheses { public static void main(String[] args) { String s = "(a)())()"; InvalidParentheses self = new InvalidParentheses(); System.out.println(self.r

2021-10-27 11:25:30 56

原创 2021年10月22日-第七次课

一、二进制文件1. 写入二进制文件void writeBinaryContent() { char location[] = "../file.txt"; FILE * fp = fopen(location, "w"); // CEC4 BCFE -> 文件 char buff[128] = {0xce, 0xc4, 0xbc, 0xfe}; unsigned int res = fwrite(buff, 2, 2, fp); printf("%d\n", res); fclo

2021-10-22 12:03:51 69

原创 2021年10月9日-设计模式之责任链模式

第二十四章:责任链模式一、情景引入作为学生会某部门干事,现在需要递交经费申请请求。经费如果数额不大的话就由部长审批,如果数额较大需找主席审批,如果数额很大需找辅导员审批。我们可以选择 if 语句来解决这个问题,首先我们自己根据数额判断一下应该找谁审批,然后把这个请求给他。不过,问题来了,如果申请人我不知道数额标准怎么办。比如你不能要求每个去政府机构办事的公民都熟读办事标准吧!所以能不能将请求和处理请求之间解耦呢(+_+)?现在我们使用责任链模式重新解决这个问题。申请人我直接吧请求给部长或者主席或者

2021-10-09 11:31:23 80

原创 2021年10月8日-设计模式之策略模式

第二十三章:策略模式一、情景引入现在我们要做一个 rpg 游戏,rpg 游戏有多种职业,这些职业的行为会有所不同。请看下述方式实现各个职业有什么问题:角色抽象类:abstract public class Character { public abstract void display(); public abstract void attack(); public abstract void cure(); public void flee() {

2021-10-08 20:46:11 64

原创 2021年10月8日-设计模式之状态模式

第二十二章:状态模式一、模式简介一个事物有不同的状态,比如人有高兴、悲伤、生气等状态。人处于这些不同的状态会有不同的行为,如高兴时会唱歌、生气时会跺脚等等。而且这些状态会随着行为的发生而相互转换,如生气时跺脚人的状态就由生气转变为冷静。如果我们在一个方法中使用 if 语句来描述这些状态的改变,势必会有大量 if 的嵌套,而且后续增加新的状态还要修改代码不符合开闭原则。所以我们使用状态模式来代替 if 语句基本类图:State:抽象状态类,里面声明了各个行为CurrentStateA、Cur

2021-10-08 19:24:11 43

原创 2021年10月7日-设计模式之解释器模式

第二十一章:解释器模式一、模式简介1)编译原理中:一个算术表达式通过词法分析器形成词法单元,而后这些词法单元通过语法分析器构建语法分析树,最终形成一个抽象的语法分析树。词法分析器和语法分析器都可以看作是解释器2)解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,使用这个解释器来解释语言中的表达式3)应用场景:一些重复出现的问题可以用一种简单的语言来表达(正则表达式)一个简单语法需要解释的场景(运算表达式计算)一个需要解释执行的语言中的句子表示为一个抽象语法树(编译器、解释器

2021-10-07 22:02:22 57

原创 2021年10月7日-设计模式之备忘录模式

第二十章:备忘录模式一、模式简介如何让一个已经被修改的对象恢复到修改前的状态?能想到的方法就是在这个对象修改前,我们根据此对象现在的状态,new 一个新的对象。不过这样会暴露类的内部结构,不符合迪米特法则。所以我们将 new 这个动作封装成类中的一个方法就是备忘录模式原理类图:Caretaker 用来管理备忘录对象二、实际案例现在要求实现浏览器的返回上一页的功能WebPage 类@Datapublic class WebPage { private String cont

2021-10-07 19:50:19 63

原创 2021年9月29日-设计模式之中介者模式

第十九章:中介者模式一、模式简介随着系统越做越大,我们的类也越来越多。每个类或多或少会调用另外几个类中的方法。如下图:可以说是相当杂乱的,尤其是这些调用关系是分散在各个类中所以为了是各个类解耦,我们将这些逻辑调用独立出来放到一个叫中介者的类中。中介者这个类就规定了这些同事类的调用关系。所以一旦一个同事类需要调用另一个同事类的方法,只需发消息给中介者类,由中介者类来调用另一个同事类的方法。所以现在的关系就像下图:所以中介者这个类会很复杂,不好写二、模式实例让我们看一个猫和铲屎官的例子,猫和

2021-09-29 20:55:52 64

原创 2021年9月29日-设计模式之观察者模式

第十八章:观察者模式一、模式简介观察者模式有两个组成部分:观察者(Observer)和 被观察者(Subject)Subject 就像一个内容创作者,Observer 如果订阅了它,Subject 内部就将这个 Observer 保存在内部一个集合中。Subject 可以有很多 Observer,一旦 Subject 创作的内容更新,就可以调用每个 Observer 自己的更新方法将新创作的内容推送给每个 Observer二、模式实例现在我们有一个 up 主,他有很多订阅者,每次发一个新视频他需

2021-09-29 17:13:24 52

原创 2021年9月29日-为运算表达式设计优先级

为运算表达式设计优先级题目要求的是运算的不同顺序,所以即使两个运算顺序相同也是不同去重的。我们考虑两种运算顺序只要最后一个运算的运算符是不同位置的,那么就可以保证这两种运算顺序绝对不同,对吧!所以我们可以首先确定最后一个运算符,这样字符串就被分成了两部分,即子问题。我们对子问题递归求解就可以得到所有可能的运算结果。我们根据子问题的运算结果整合一下就是最终答案啦!public class DiffWaysToCompute { public static void main(String[] ar

2021-09-29 11:01:41 53

原创 2021年9月28日-设计模式之迭代器模式

第十七章一、模式简介1)迭代器我们使用容器技术时经常使用,可以说是既熟悉又陌生,属于行为型模式2)迪米特法则要求一个类应该暴露的信息越少越好,所以当我们的一个集合类想要遍历元素而不暴露内部结构就可以采取迭代器模式3)迭代器提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素模式基本类图:所以迭代器模式非常简单,只需实现两个接口即可。因为不同的集合,它内部的数据结构是不一样的,所以每个具体的集合类应有自己的迭代器实现二、模式实例这两年垃圾分类越来越严格了,所以我们今天实现一个垃圾桶的类,

2021-09-28 23:13:54 64

原创 2021年9月28日-路径总和 III

路径总和 III方法一:直接递归首先我们用递归解决从根节点出发的路径和为 target 的路径数,然后我们在遍历每一个节点,每个节点都做一遍上述的递归,将答案累加即使最终答案中等题的递归一次不行我们就多拆几次?不过直接递归会做大量重复计算private int sum = 0;public int pathSum(TreeNode root, int targetSum) { if (root == null) { return 0; } sum +=

2021-09-28 14:17:17 40

原创 2021年9月27日-设计模式之访问者模式

第十六章:访问者模式一、基本介绍现在我们有这么几个类:足球类、篮球类、排球类。现在需要实现获取各个球重量的功能。那么直接在各个球类中加一个获取重量的方法就行了。那么问题来了,现在又需要获取各个球的颜色。那我们还是修改各个类增加个新方法?那如果以后有更多的新需求还是这么做?这显然违反了 OCP 原则。所以我们使用访问者模式解决这个问题。访问者模式基本类图:Visitor 里面的 operation 的数量往往对应着具体 Element 的种类数每新增一个需求只需新建一个 ConcreteVis

2021-09-27 20:07:08 46

原创 2021年9月27日-设计模式之命令模式

第十五章:命令模式一、基本介绍1)命令模式有三个组成部分:命令发起者(Invoker)、命令(Command)、命令接收者(Receiver)2)消除了命令发起者和接收者之间的耦合3)命令模式还支持撤销的操作基本类图:二、模式实例实现指挥官可以向士兵发送命令,指挥行动的功能Command 抽象类public abstract class Command { abstract public void execute(); abstract public void undo

2021-09-27 16:36:44 88

原创 2021年9月27日-最大正方形

005. 最大正方形dp[i][j]dp[i][j]dp[i][j] 表示以 matrix[i][j]matrix[i][j]matrix[i][j] 为右下角的最大矩形的边长public class MaximalSquare { public static void main(String[] args) { char[][] matrix = { {'1', '0', '1', '0', '0'}, {'1', '0

2021-09-27 13:20:33 52

原创 2021年9月27日-最长递增子序列

最长递增子序列方法一:dp[i] 表示以 nums[i] 结尾的递增子序列的最大长度,复杂略高// 时间复杂度高public int lengthOfLIS(int[] nums) { // dp[i] 以 nums[i] 为结尾的严格递增子序列 int[] dp = new int[nums.length]; dp[0] = 1; int max = 1; for (int i = 1; i < dp.length; i++) { for

2021-09-27 13:00:27 39

原创 2021年9月26日-设计模式值模板方法

第十四章:模板方法一、基本介绍现在我现在需要写一个程序来让机器人做奶茶,做奶茶的过程可以分为加奶粉、冲泡、加配料、包装几个过程。无论是做一杯什么口味的奶茶,它的步骤都是这几步,所以我就可以定义一个抽象类,做奶茶的各个步骤声明成抽象方法,不过大致的制作流程在这个抽象类中做实现类图如下:二、具体实现MilkyTea 抽象类public abstract class MilkyTea { // 方法的调用逻辑由父类决定 void make() { addPowder(

2021-09-26 20:52:03 61

原创 2021年9月26日——C语言基础(第四次课)

C语言指针教案

2021-09-26 19:32:25 188

原创 2021年9月25日-设计模式之代理模式

第十三章:代理模式一、基本介绍1)提供一个目标对象的代理,可以通过这个代理对象间接访问目标对象,而且还可以在目标对象已有的功能上扩展功能2)被代理对象可以是远程对象、创建开销大的对象或需要安全控制的对象3)代理模式主要分为:静态代理和动态代理,动态代理包括 JDK 代理、Cglib 代理二、静态代理静态代理很简单,要求代理对象的目标对象要有共同的父类,即它们是兄弟关系静态代理类图:具体实现代码:父类接口public interface AbstractTeacher { voi

2021-09-25 20:14:05 72

原创 2021年9月24日-设计模式之享元模式

第十二章:享元模式一、基本概念1)享元模式(Flyweight Pattern),也叫蝇量模式:使用共享技术有效的支持大量细粒度对象2)常用于系统底层开发,解决系统的性能问题。例如:数据库连接池,字符串常量池,缓冲池等。3)享元模式能够解决重复对象内存浪费问题。当需要相似对象时,不需要新建对象,而是从缓冲池中取。二、原理类图Flyweight 是抽象的享元角色,同时定义出对象的外部状态和内部状态ConcreteFlyweight 是具体的享元角色UnsharedConcreteFlywe

2021-09-24 17:18:50 48

原创 2021年9月23日-设计模式之外观模式

第十一章:外观模式一、问题引入现在我们开了个包子点,需要为我们的自动机器人设计一个程序来包包子。为完成目标我设计了一下两个类,实际情况下可能更多这两个类中有很多相关的方法,我们需要调用里面的方法来进行包包子。通常我们在主类中 new 出这两个对象,然后根据流程调用相应的方法来完成业务。然而这样会使主类中的存在太多的逻辑调用,是的项目难以维护,而且还和具体类产生耦合二、外观模式外观模式(Facade Pattern)提供了一个统一的接口,在外观类中我们将复杂的逻辑调用封装成几个简单的方法。这

2021-09-23 19:57:39 42

原创 2021年9月23日-3的幂

3的幂进阶:不能使用循环或递归考虑到凡是 3 的幂都是 3 * 3 * 3 * … 3 的形式,所以凡是 3 的幂的数,它的因数都是 3 的幂。如果一个数,不能整除比它的 3 的幂,那么这个数不是 3 的幂所以数学解法就是:class Solution { public boolean isPowerOfThree(int n) { return n > 0 && 1162261467 % n == 0; }}像这种数学解法做个积累就行

2021-09-23 10:35:02 157

原创 2021年9月22日-忆阻神经网络综述

忆阻神经网络综述

2021-09-22 20:54:20 4799

原创 2021年9月22日-设计模式之组合模式

第十章:组合模式一、问题引入现在要求打印一学校学生会信息,打印的信息包括校学生会、学生会各部门以及各部门的组成人员。不难发现,打印的三个部分属于整体和部分的关系,例如学生会各部门组成了校学生会。所以针对这个问题,我们使用组合模式。二、组合模式组合模式一般类图:Component 是所有组成部分的抽象类,里面定义了一些操作子节点的方法Leaf 即叶子节点,表示内部不再有组成部分的节点,例如学生会成员Composite 即非叶子节点,其内部仍有其他的组成部分三、解决案例Compone

2021-09-22 17:51:15 48

原创 2021年9月22日-设计模式之装饰者模式

第九章:装饰者模式一、问题引入现在是这么个情况:有这么几个机器人,这几个机器人分别会安装主机、安装显示器、装系统。现在我想要一个既能安装主机、又能安装显示器的机器人。如果用继承的方式新建一个类是可以完成要求的,但是如果后续又需要一个既能安装显示器又能装系统的机器人的话又要新建一个类。随着我们的需求增加,类的数量会越来越多。所以针对这个问题,我们选择装饰者模式。装饰者模式又称包装模式(Wrapper Pattern),属于结构型设计模式。该模式可以让一个对象动态的增加新功能(代理模式???)二、装饰者

2021-09-22 15:47:26 64

原创 2021年9月19日-设计模式之桥接模式

第十章:桥接模式一、问题引入现奶茶店有上述多种奶茶(实际情况可能更多),如果需要我们设计一个点奶茶的程序,传统的方案如上图所示,采用继承的方式,让每一种奶茶都对应一个子类。问题也显然一见,这样做会导致类爆炸。我们看到,一杯奶茶主要有两个特点,即尺寸和所加的配料,这两个特点相乘就导致了很多的类,所以为了减少类的数量,我们将这两个特点拆成两种类。将奶茶的尺寸作为桥接类(两个特点最后当然要组合起来才能构成一杯具体的奶茶,所以两个特点类必有一个桥接类)。二、桥接模式类图如下:MilkyTea 抽象类

2021-09-19 21:18:18 149

原创 2021年9月19日-设计模式之适配器模式

第七章:适配器模式一、适配器概述1)适配器模式(Adapter)可以帮助某个类转换成使用者期望的另一个接口表示(这段话不好理解,看下面的例子就理解了),别名又叫包装器(Wrapper)2)适配器模式属于结构型模式,分为三类:类适配器模式、对象适配器模式、接口适配器模式二、类适配器模式1. 类适配器模式实例现有一手机需要使用 5v 的接口充电,但是现在只提供 220v 的电源,所以我们就需要一个适配器。类图如下:Voltage220 类public class Voltage220 {

2021-09-19 16:22:00 52

原创 2021年9月18日-设计模式之创建者模式

第六章:建造者模式一、问题引入现在要求我们生产电脑,有笔记本电脑、台式电脑。电脑的生产过程工序繁多,不过好在各种电脑的生产过程大致相似。传统实现方式:电脑抽象类:@Data@ToStringpublic abstract class Computer { private String mainboard; private String memery; private String cpu; private String gpu; private Stri

2021-09-18 17:01:11 80

原创 2021年9月18日-回文子串数

回文子串数中心扩展法:选定回文串的中心,用两个指针分别向两边移动,在移动的过程中检查 s.subString(i, j) 还是不是回文串,即 s[i] == s[j] 吗?是的话结果加一,不是的话停止移动换下一个中心不过回文串的长度有奇数和偶数,所以中心要分别枚举一个和两个的情况// 中心扩展法public int countSubstrings(String s) { int res = 0; for (int i = 0; i < s.length(); i++) {

2021-09-18 11:35:08 46

原创 2021年9月17日-设计模式之原型模式

第五章:原型模式一、问题引入有一个 Sheep 对象,现要求克隆两份一模一样的对象常规做法:Sheep 对象@Data@ToString@AllArgsConstructorpublic class Sheep implements Cloneable{ private int id; private String name; private int age; private boolean male;}使用 new 来克隆对象public stati

2021-09-17 22:11:43 67

原创 2021年9月17日-设计模式之工厂模式

第四章:工厂模式一、简单工厂模式简单工厂模式属于创建型模式,是工厂模式家族中最简单实用的模式来看一下没有工厂之前的代码Pizza 类public abstract class Pizza { public abstract void prepare(); public abstract void bake(); public abstract void cut(); public void box() { System.out.println("披萨

2021-09-17 20:24:28 36

原创 2021年9月15日-设计模式之单例模式

第三章:单例设计模式一、设计模式概述1)《设计模式》是经典书籍,作者是 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides Design(俗称:“四人组 GOF”)2)设计模式——design pattern,是某类问题的通用解决方案3)设计模式分为三种类型,共 23 种创建者模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式结构型模式:适配器模式、桥接模式、装饰者模式、组合模式、外观模式、享元模式、代理模式行为型模式:模

2021-09-15 20:11:06 80

原创 2021年9月14日-设计模式之UML

第二章:UML 类图一、UML 概念1)UML —— Unified modeling language,统一建模语言用来软件分析和设计,帮助软件开发人员进行思考和记录思路2)UML 是一套符号的规定,用来描述软件模型中各个元素和它们之间的关系二、UML 图分类名称组成用例图-静态结构图类图、对象图、包图、组件图、部署图动态行为图交互图(时序图和协作图)、状态图、活动图三、UML 类图1)用于描述系统中的类(对象)本身和类(对象)之间的各种静态关系2

2021-09-14 20:36:43 64

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除