自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

QAQ

好好学习,天天向上

  • 博客(242)
  • 收藏
  • 关注

原创 算法题小技巧

1.set重复的元素会返回false的:

2021-08-29 16:22:09 135

原创 动态规划概念、01背包、完全背包

投资分配问题(股票投资问题)背包问题(工厂排放问题、装载问题)

2021-09-27 17:10:04 209

原创 秋招笔试题

1.掌qu1.单列表实现栈class Node{ //https://blog.csdn.net/wuzhaojun1st/article/details/78010693 Object element; Node next; public Node(Object element) { this(element,null); } public Node(Object element, Node next) { this.

2021-09-26 15:21:44 195

原创 leetcode记录

1.最长回文串用dp:题目class Solution { public String longestPalindrome(String s) { int len = s.length(); // 特判 if (len < 2){ return s; } int maxLen = 1; int begin = 0; // 1. 状态定义

2021-09-14 09:57:26 192

原创 System.arraycopy() 和 Arrays.copyOf()

区别:https://blog.csdn.net/qq_32851113/article/details/90313108system.arraycopy是复制数组中制定元素到目标数组,arrays.copyof会创建一个新的数组,并调用了system.arraycopy。使用参考:https://blog.csdn.net/fczheng/article/details/99624700...

2021-09-10 14:29:41 131

原创 统计字符串出现个数

private static void countString(String str){ HashMap<Character,Integer> map=new HashMap<>(); char[] chars = str.toCharArray(); for (char c : chars) { if (map.containsKey(c)){ Integer value = m

2021-09-08 09:56:17 88

原创 18、访问者模式

【例】给宠物喂食现在养宠物的人特别多,我们就以这个为例,当然宠物还分为狗,猫等,要给宠物喂食的话,主人可以喂,其他人也可以喂食。访问者角色:给宠物喂食的人具体访问者角色:主人、其他人抽象元素角色:动物抽象类具体元素角色:宠物狗、宠物猫结构对象角色:主人家//抽象元素角色类public interface Animal { //接受访问者访问的功能 void accept(Person person);}//抽象访问者角色类public interface Per.

2021-09-06 13:17:51 106

原创 17、迭代器模式

定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示【例】定义一个可以存储学生对象的容器对象,将遍历该容器的功能交由迭代器实现,涉及到的类如下:public class Student { public Student(String name, String number) { this.name = name; this.number = number; } private String name; pri

2021-09-06 11:18:20 76

原创 16、中介者模式

【例】租房现在租房基本都是通过房屋中介,房主将房屋托管给房屋中介,而租房者从房屋中介获取房屋信息。房屋中介充当租房者与房屋所有者之间的中介者。类图如下://抽象中介者类public abstract class Mediator { public abstract void constact(String message,Person person);}//抽象同事类public abstract class Person { protected String name..

2021-09-06 09:09:33 125

原创 优势洗牌【田忌赛马】 贪心

就是你知道B了,返回一个重新排序的A (能一 一对应比B把的数组)思路:首先对A 和B进行排序,然后从A中拿出最小的和B最小的进行比较,如果还是比B小,那么就把A的那个元素丢进右边的队列中去。如果取出的A比B大,那么就在B的旁边存进列表(可以用Map模拟)中去: public static void main(String[] args) { //如果现在A和B一一比较,那么A比B小三个,输了/* int[] A=new int[]{10,24,8,32}; .

2021-09-05 20:06:45 145

原创 Dota2参议院 【贪心】

每次都应该把本结点往后下标最小的对手干掉。eg:RDRDD,如果R先把第三个D先干掉。那么第二个D会干掉第二个R,R必输。如果R先干掉第一个D,那么就到第二个R再禁掉D,R必赢。思路:可以使用贪心算法,局部最优,每次干掉对手下标最小的元素,再把本身加入到队尾(所以用队列),因为要循环嘛。public class leetcode49 { public static void main(String[] args) { String str=new String("RDDR");.

2021-09-05 12:49:23 111

原创 15、责任链模式

6.4.3 案例实现现需要开发一个请假流程控制系统。请假一天以下的假只需要小组长同意即可;请假1天到3天的假还需要部门经理同意;请求3天到7天还需要总经理同意才行。类图如下//请假条类public class LeaveRequest { private String name; //请假天数 private int num; //原因 private String content; public LeaveRequest(String name..

2021-09-05 09:40:14 74

原创 打家劫舍1【递归、动态规划】

1 、不用动态规划解法:这道题就是求数组的下标不能连续 而且求最大和 。 不能用贪心算法哦,因为如[1,2,3]你不能取1的时候局要看2,取2的时候看和3哪个大,那么就很难取到。用递归解:思路:看i-2 和i-1的情况。如果i-2 > i-1 那么就取i 。如果i-2<i-1那么就取i-1,而不能取i了。那么就是取 i-1 或者 i-2+i的public static void main(String[] args) { int[] array=new int[.

2021-09-04 17:27:57 377

原创 14、命令模式

public class Order { //餐桌号码 private int diningTable; //所下的餐品及份数 private Map<String,Integer> foodDir=new HashMap<String,Integer>(); public int getDiningTable() { return diningTable; } public void setDini...

2021-09-04 10:30:43 74

原创 12、模板方法模式

就是把不确定的方法定义为抽象方法,让子类实现,顺序定义为模板方法案例:【例】炒菜炒菜的步骤是固定的,分为倒油、热油、倒蔬菜、倒调料品、翻炒等步骤。现通过模板方法模式来用代码模拟。类图如下:public abstract class AbstractClass { //模板方法 就是放顺序 //为防止恶意操作,一般模板方法都加上 final 关键词。 public final void cookProcess(){ pourOil(); ..

2021-09-04 09:15:23 131

原创 香槟塔 [找出规律解题]

public static void main(String[] args) { System.out.println(champagneTower(5,2,0)); } /** * @description: poured倒了多少杯 query_row查那行那列的被子 * @param: * @param: null * @return: * @author QLBF * @date: 2021/9/3 17:17..

2021-09-03 17:31:10 105

原创 11、享元模式

先来看类图://抽象享元角色public abstract class AbstractBox { //获取图形的方法 public abstract String getShape(); //显示图形及颜色 public void display(String color){ System.out.println("方块形状: "+getShape()+",颜色为:"+color); }}//G图形类(具体享元角色)public...

2021-09-03 16:38:46 84

原创 10、组合模式

1、概述2、结构组合模式主要包含三种角色:抽象根节点(Component):定义系统各层次对象的共有方法和属性,可以预先定义一些默认行为和属性。树枝节点(Composite):定义树枝节点的行为,存储子节点,组合树枝节点和叶子节点形成一个树形结构。叶子节点(Leaf):叶子节点对象,其下再无分支,是系统层次遍历的最小单位。3、软件菜单例子如下图,我们在访问别的一些管理系统时,经常可以看到类似的菜单。一个菜单可以包含菜单项(菜单项是指不再包含其他内容的菜单条目),也可以包含带有其他菜单项

2021-09-03 09:33:33 79

原创 预测赢家-子游戏【动态规划dp】

如果是石子游戏这道题就是先手必赢的解法1:递归思路:public static void main(String[] args) { int[] array=new int[]{5,200,2,3,1}; //模拟石子游戏,堆数为偶,先手必赢 //int[] array=new int[]{5,200,2,3,1};//堆数为5是奇数 先手必输 int sum=0; for (int i : array) { ..

2021-09-02 21:39:08 201 1

原创 省份数量问题【深度优先遍历 广度优先遍历】

使用了递归之后,时间复杂度都会变为O(n)或者O(logN)1、深度优先public static void main(String[] args) { //这个表示下标为0的城市连了自己和1号城市,没有连2号城市。 //1号城市连了0和自己。2号城市只连了自己,所以这里省份为2. System.out.println(getProvince(new int[][]{{1, 1, 0}, {1, 1, 0}, {0, 0, 1}})); ..

2021-09-01 21:40:49 198

原创 9、外观模式

1、概述有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就有许多的基金,它将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于股票、债券、外汇等领域,而基金投资的收益归持有者所有,管理机构收取一定比例的托管管理费用。定义:外观模式又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不

2021-09-01 19:47:53 75

原创 9、桥接模式

现在有一个需求,需要创建不同的图形,并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系://视频文件 实现化角色public interface VideoFile { void decode(String filename);}//实现化角色1public class AviFile implements VideoFile { @Override public void decode(String filename) {

2021-09-01 19:01:23 82

原创 三角形的最大周长【贪心算法 21】

思路:我们可以贪心来做,首先对这个数组排序,然后从大到小遍历找到符合的就return。示例 1:输入:[2,1,2]输出:5示例 2:输入:[1,2,1]输出:0示例 3:输入:[3,2,3,4]输出:10示例 4:输入:[3,6,2,3]输出:8public static void main(String[] args) { int[] array=new int[]{2,3,4,5,-1,1,6}; System.out.println(max.

2021-08-31 21:24:37 163

原创 柠檬水找零【贪心算法 20】

输入:[5,5,5,10,20] 输出:true输入:[10,10] 输出:false这里贪心算法涉及了最优解, 当顾客来了20块,那么先用10+5来找,因为尽可能留多一点5块给来10块的找。public class leetcode20 { public static void main(String[] args) { int[] custom=new int[]{5,5,5,10,10,10,20}; System.out.println(lemon..

2021-08-31 20:58:03 155

原创 最长连续递增序列[贪心算法 19]

从0开始寻找递增序列,并将长度记录,记录递增序列的最后一个下标,然后从该下标继续寻找,记录长度,取长度最大的即可【贪心算法就在于找到当前个的长度,然后和之前那个长度对比,如果之前的小就抛弃掉,然后继续想找更大的】public static void main(String[] args) { int[] array=new int[]{2,1,3,4,-2,4,5,6,-7,0}; System.out.println(findLength(array)); }.

2021-08-31 20:30:19 88

原创 二叉树的最小深度【深度优先DFS,广度优先BFS 17、18】

1、深度优先DFS遍历整颗数,找到每一个叶子节点,从叶子节点往上开始计算,左右子节点都为空则记录深度为1左右子节点只有一边,深度记录为子节点深度+1左右两边都有子节点,则记录左右子节点的深度较小值+1class TreeNode{ int val; TreeNode left; TreeNode right; public TreeNode(int val, TreeNode left, TreeNode right) { this.val = .

2021-08-30 21:38:40 150

原创 7、适配者模式

如果去欧洲国家去旅游的话,他们的插座如下图最左边,是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑,手机在当地不能直接充电。所以就需要一个插座转换器,转换器第1面插入当地的插座,第2面供我们充电,这样使得我们的插头在当地能使用。生活中这样的例子很多,手机充电器(将220v转换为5v的电压),读卡器等,其实就是使用到了适配器模式。1、适配者模式定义:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类适配器模式和对象适配

2021-08-30 20:59:27 258

原创 6.3 CGLIB动态代理,三种代理模式对比和优缺点

先看下还是哪个一篇的动态代理:https://blog.csdn.net/GLOAL_COOK/article/details/119982949 <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2.2</version>

2021-08-30 20:16:03 493

原创 求子数组最大平均数【滑动窗口 简单 15】

就是利用滑动窗口:把新的值加上,旧的值删掉,很简单的:public static double findMaxAverage(int[] array,int k){ double sum=0; //先计算第一个窗口的值 for (int i = 0; i < k; i++) { sum+=array[i]; } double max=sum; //max初始化先是第一个窗口的 ..

2021-08-30 11:33:42 122

原创 6.2、JDK动态代理

先看一下什么是静态代理:https://blog.csdn.net/GLOAL_COOK/article/details/117065944接下来我们使用动态代理实现上面案例,先说说JDK提供的动态代理。Java中提供了一个动态代理类Proxy,Proxy并不是我们上述所说的代理对象的类,而是提供了一个创建代理对象的静态方法(newProxyInstance方法)来获取代理对象。//售票接口public interface SellTickets { void sell();}//目标

2021-08-29 19:42:08 124 1

原创 排序硬币[暴力、二分 13]

(1) 暴力迭代思路:放了一行后,看剩下的硬币够放下一行不//解法1 暴力迭代 public static int CoinSort(int num){ for (int i = 1; i <= num; i++) { num=num-i; if (num <= i){ return i; } } return 0; }.

2021-08-29 13:19:18 106

原创 斐波那锲数列 [12、暴力递归、去重递归、双指针算法详解]

解法:(1)暴力递归,缺点:很多重复计算了,时间复杂度高(2的n次方j)//解法1:暴力递归递归,缺点:很多重复计算了 public static int calculate(int num){ if (num == 0){ return 0; } if (num==1){ return 1; }else { return calculate(num-1)+.

2021-08-29 11:06:23 190

原创 两数之和(用map标记)

一首先你能想到用两重for暴力解题,但是我们得用map来,时间复杂度会降低一点:数组有序无序都可以:public class leetcode10 { public static void main(String[] args) { int[] array=new int[]{4,2,3,1,5,6}; System.out.println(Arrays.toString(solution(array,10))); }//这里的map用的真是秒

2021-08-28 11:46:47 120

原创 5、建造者模式、工厂模式与建造者模式对比

1.概念建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象 。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节 。2、结构3、例子//自行车类 产品类public class Bike { private String frame; private String seat; public String getSeat() { return seat; } public void setS

2021-08-28 11:17:42 141

原创 黑马设计模式概念、类关系、七大原则

二、类关系(1)关联关系分为单向关联(一方持有成员变量)、双向关联(双方持有对方的成员变量)、自关联(自己持有自己的成员变量)(2)聚合关系空心菱形作为成员变量的形式(3)组合关系实心菱形作为成员变量的形式(4) 依赖关系虚线箭头作为参数、或者局部变量传递(5)继承(泛化)关系实线空心三角形(6)实现关系虚线三角形三、七大原则(1)开闭原则(2)里氏代换原则(3)依赖倒转原则(4)接口隔离原则接口隔离原则:客户端不应该被迫依赖于它不使用.

2021-08-28 09:59:26 195

原创 博客3 Aop使用、缓存优化 别的优化、总结

1、AOP使用(1)定义一个注解://Type 代表可以放在类上面 Method 代表可以放在方法上@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface LogAnnotation { String module() default ""; String operator() default "";}然后再Controller加注解就行然后

2021-08-24 21:52:12 416

原创 博客重点内容2 登录拦截器 ThreadLocal使用、线程池生产使用

1.登录拦截器重点在注释@Component@Slf4jpublic class LoginInterceptor implements HandlerInterceptor{ @Autowired private LoginService loginService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object

2021-08-23 17:42:18 360

原创 swagger入门

pom导入:<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <

2021-08-23 13:38:46 149

原创 博客系统重点内容1、实体与db字段不一致解决、统一异常处理、枚举使用、do、JWT、登录过程、ID自增问题

1.mybatis和mybat-plus实体和数据库名不一样:https://blog.csdn.net/William_TWG/article/details/1094029632.数据库为Bigint、Bit那么对应实体为Long、Integer3.

2021-08-21 22:46:25 252

原创 三个数的最大乘积[线性扫描]

1.排序思路:1.三个数都是整数或者都是负数:那么就排序,取大的前三个2.两负一正:取排序后倒数两个负数,和取排序最大那个数相乘3.两正一负:直接像第一种那样取前三大public static int sortMethod(int[] array){ Arrays.sort(array); int n = array.length; //就是两种情况而已 return Math.max(array[0]*array[1]*arr.

2021-08-19 20:51:20 147

空空如也

空空如也

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

TA关注的人

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