自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(151)
  • 问答 (1)
  • 收藏
  • 关注

转载 单元测试--测试类的私有方法--反射

https://blog.csdn.net/KinseyGeek/article/details/68501886

2021-11-17 10:58:32 299

原创 438. 找到字符串中所有字母异位词(Medium)

题目题目及示例我的题解public List<Integer> findAnagrams(String s, String p) { List<Integer> result = new ArrayList<>(); int pLen = p.length(); int sLen = s.length(); if (pLen > sLen) { return result; } int[]

2021-11-13 10:30:00 169

原创 1109. 航班预订统计(Medium)

题目题目及示例我的题解class Solution { public int[] corpFlightBookings(int[][] bookings, int n) { int[] diff = new int[n]; for (int[] booking : bookings) { diff[booking[0] - 1] += booking[2]; if (booking[1] < n){

2021-11-12 19:31:44 673

原创 567. 字符串的排列(Medium)

题目题目及示例我的题解class Solution { public boolean checkInclusion(String s1, String s2) { int left = 0; int right = 0; // 记录s1字母 int[] fre = new int[26]; Set<Integer> flag = new HashSet<>(); f

2021-11-12 09:19:10 386

原创 76. 最小覆盖子串(Hard)

题目题目及示例我的题解 - 滑动窗口class Solution { public String minWindow(String s, String t) { String result = ""; int left = 0; int right = 0; // 统计 t 中字母出现的频率 Map<Character, Integer> fre = new HashMap<>()

2021-11-12 00:15:00 324

原创 滑动窗口法

原理解析就当做左右指针来用使用场景求满足条件的最小/大连续子串。解法公式当满足条件时左指针右移,当不满足条件时右指针右移。// s 为给定的字符串,亦可为数组等public String slideWindow(String s) { int left = 0; int right = 0; while (right < s.length()) { // todo:根据right上的数据构造新的结果 right++;

2021-11-11 20:07:05 199

原创 前缀和 & 差分数组

使用场景当给定一组数据,需要根据条件选取几个数据进行重复运算,且该运算量较大时,可在构建这组数据时先算出所有条件下的值(即前缀和),再根据规律相加、相减等得到所需值。这样可以减少重复运算量。难点找到前缀和的定义找到所需条件和前缀和之间的关联例题303. 区域和检索 - 数组不可变(Easy)304. 二维区域和检索 - 矩阵不可变(Medium)560. 和为 K 的子数组(Medium)...

2021-11-09 22:15:00 52

原创 304. 二维区域和检索 - 矩阵不可变(Medium)

题目题目及示例我的题解 - 前缀和法class NumMatrix { int[][] preSum; public NumMatrix(int[][] matrix) { preSum = new int[matrix.length + 1][matrix[0].length + 1]; for (int i = 1; i <= matrix.length; i++) { for (int j = 1; j <=

2021-11-09 01:00:00 103

原创 560. 和为 K 的子数组(Medium)

题目题目及示例我的题解解法一:前缀和+暴力遍历class Solution { int subarraySum(int[] nums, int k) { int n = nums.length; int[] preSum = new int[n + 1]; preSum[0] = 0; for (int i = 0; i < n; i++) { preSum[i + 1] = preSum[i] +

2021-11-09 00:45:00 3917

原创 303. 区域和检索 - 数组不可变(Easy)

题目题目及示例我的题解解法一:傻瓜解法class NumArray { private int[] result; public NumArray(int[] nums) { this.result = nums; } public int sumRange(int left, int right) { int sum = 0; for (int i = left; i < right; i++) {

2021-11-08 21:15:00 4017

原创 1402. 做菜顺序(Hard)

题目题目及示例我的题解将所有的菜按照喜爱度从小到大排序,算出全部做出来的结果标志为base state。然后观察可以发现,每减少一道菜,结果=上次的结果-(全部菜喜爱度-减少了的菜的喜爱度)。这样就可以算出来,完全是数学解法。 public int maxSatisfaction(int[] satisfaction) { Arrays.sort(satisfaction); if (satisfaction[satisfaction.length - 1] &

2021-10-29 11:58:59 61

原创 剑指 Offer II 055. 二叉搜索树迭代器(Easy)

题目题目及示例我的题解/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNo

2021-10-14 16:21:08 122

原创 模板方法模式

模板方法模式:定义一个操作中算法的骨架,而将一些步骤延迟到子类中。该模式使得子类可以不改变一个算法的结构即可重新定义该算法的特定步骤。AbstractClass定义了一个模板方法(TemplateMethod),即算法的骨架,其中包括算法PrimitiveOperation的实施,而在具体实现子类将重定义来实现每一个算法的步骤ConcreteClass实现了PrimitiveOperation来完成算法中的特定步骤当子类出现重复的单一行为时,可用模板方法模式将重复动作搬移到父类中。...

2021-07-28 23:35:28 64

原创 Java MongoDB 联表操作Aggregate用法

联表查询方法首先,要实现联表查询,必须有一个表示连接所有表的中心,如下图中的good表。代码实现功能:实现联表查询分类为animal且将所得结果按照amount从小到大排序。public static void main(String[] args) { // 获取数据库 MongoDatabase mongoDatabase = MongoDBUtils.getConnect(); MongoCollection<Document> good = mongoD

2021-07-13 15:44:42 1382

原创 原型模式

理解原型模式:用原型实例指定创建对象的种类,并通过拷贝这些原型,创建新的对象。UML图如下:尽量减少初始化,其所花费的时间非常浪费。使用克隆方式就可只初始化一次,而修改需修改的地方,保留其余部分。深复制&浅复制深复制:复制引用对象和值浅复制:复制引用和值,引用对象的值不会被引用...

2021-07-12 23:40:51 64

原创 工厂方法模式

理解工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。UML图如下:以计算器程序为例,在简单工厂模式中,在原有的运算上再加一个幂运算的话,需在工厂类中添加一个case语句,改变了原有的代码结构,违背了开放-封闭原则。于是把原来工厂中的case语句也拆开成子类继承原工厂类,就可以实现添加或删除模块而不影响原有代码,即符合了开放-封闭原则。但是这样一来,判断的重担又集中在了客户端代码上了。...

2021-07-08 23:12:59 65

原创 UML类图学习

以下图为例:类和接口类是有三层结构的矩形第一层为类名,若为斜体,则为抽象类。上图中,动物、鸟均为抽象类;其他为实体类。第二层为类的特性(即字段或属性)。第三层为类的方法或行为。注意前面的符号:+代表public,-代表private,#代表protected。接口为两层结构的矩形一般第一层会标记<<interface>>加上接口名,如飞翔接口,或者使用棒棒糖表示法,在类上实现接口,如唐老鸭实现了说人话接口。相互关系继承关系:鸟继承自动物,大雁、

2021-07-07 22:43:35 99

原创 圈复杂度讨论

定义一个方法从头走到结束会经过多少种路径。如下图,该程序的圈复杂度为6。由定义可以看出,圈复杂度与程序中if-else语句、switch语句的case数量、while语句的循环次数有直接关系。

2021-07-05 10:21:53 263

原创 代理模式

理解代理模式:为其他对象提供代理以控制对该对象的访问。UML原理图如下所示:如图所示,真正的请求实体RealSubject和代理Proxy公用接口subject,使得代理在任何时候都能代替真正的请求实体。而客户端不需要了解以上原理,只需要在使用到请求实体时,调用代理即可。应用场景远程代理:为对象在不同的地址提供代表。虚拟代理:根据需要创建开销很大的对象,通过代理来存放需要实例化很久的对象,如打开网页时,文字会很快下载好,但是大图片会随着页面滚动一张张加载,在其加载完成之前,会用一个显示未

2021-07-04 22:30:37 51

原创 装饰模式

模式理解装饰模式:动态地给一个对象添加一些额外的职责就增加功能而言,装饰模式比生成子类更加灵活。例:给人一层一层穿衣服的实现// 人类public class Person { private String name; public Person() { } public Person(String name) { this.name = name; } public void show(){ System.

2021-07-04 21:43:05 63

原创 依赖倒转原则

理解依赖倒转原则:高层模块不应该依赖低层模块,两者都应该依赖抽象;抽象不应该依赖与细节,细节应该依赖抽象。简单地理解为面向接口编程而非面向实现编程。高层模块依赖低层模块即将常用函数封装至程序库,开发项目直接调用的过程。在这个过程中,高层和低层模块是绑定的(高耦合),如果有同样的高层模块需求却不想用绑定的低层模块会很复杂。而面向接口编程,除了可自选接口外,还能在原有接口的基础上,根据新的需求,添加新的特性,这都依赖于里氏代换原则。里氏代换原则:子类型必须能替换掉其父类型。在软件中,把所

2021-07-03 12:18:32 77

原创 MongoDB其他常用函数

查询个数使用count方法db.collection1.count({}) // 查询总共有几条数据db.collection1.count({category:'fruit'}) // 查询满足条件的有几条数据

2021-07-03 10:48:56 161

原创 eclipse configure build path的问题

用eclipse重新导入项目时,出现了相同文件夹下却import失败的案例一个解决方法是,检查build path中的projects,看看有没有不依赖的文件被加入了,因为这样会产生循环依赖问题导致想导入的类找不到,去除不依赖的文件就好了。...

2021-07-02 15:18:43 651 1

原创 1276. 不浪费原料的汉堡制作方案(Medium)

题目题目及示例我的题解解方程class Solution { public List<Integer> numOfBurgers(int tomatoSlices, int cheeseSlices) { List<Integer> result = new ArrayList<>(); if (tomatoSlices % 2 != 0 || tomatoSlices > 4 * cheeseSlices || to

2021-06-30 20:40:27 109

原创 单一职责原则 & 开放-封闭原则

单一职责原则单一职责原则:一个类应仅有一个引起其变化的原因。当一个类会被很多因素改变时,应考虑分解其功能。例如俄罗斯方块中的游戏逻辑和开始计时等功能分开会使每个类内聚程度更高。开放-封闭原则开放-封闭原则:软件实体(类、模块、函数等)可以扩展却不能修改。例如,当很多公司员工准时上班成为难事时,可以考虑设计弹性工作制度,可以稍微晚到,但要保证每天工作8小时。这就是对总体工作时间或业绩的关闭,对上班时间的开放。运用到实际:当因为新需求更改代码时,可及时预想到未来某个新需求对这段代码还会造成修

2021-06-29 23:10:18 121

原创 781. 森林中的兔子(Medium)

题目题目及示例我的题解脑筋急转弯题。比如说1的兔子不能超过两个,超过了的是别的颜色,按照这个思路解即可。class Solution { public int numRabbits(int[] answers) { Arrays.sort(answers); int curAns = answers[0]; // 上一个兔子的答案 int sameAnsCnt = 1; // 与上一个兔子答案相同的答案数量 int res =

2021-06-29 20:43:08 58

原创 168. Excel表列名称(Easy)

题目题目及示例我的题解class Solution { public String convertToTitle(int columnNumber) { String str = ""; while (columnNumber != 0) { columnNumber--; str = (char) (columnNumber % 26 + 'A') + str; columnNumber

2021-06-29 20:18:30 90

原创 1913. 两个数对之间的最大乘积差(Easy)

题目题目及示例我的题解class Solution { public int maxProductDifference(int[] nums) { Arrays.sort(nums); return nums[nums.length - 1] * nums[nums.length - 2] - nums[0] * nums[1]; }}

2021-06-29 20:06:14 96

原创 策略模式+简单工厂模式

如果要设计一个商场收银系统,同时具备原价、打8折、满300减100的优惠,如何设计?简单工厂模式使用简单工厂模式确实可以比较优美地解决当下问题。// 工厂类public class CashFactory { public Cash getRealCash(String keyword) { switch (keyword) { case "原价": return new CashNormal();

2021-06-28 23:25:56 290

原创 Java MongoClient类的使用

数据库建立//mongodb 连接数据库工具类public class MongoDBUtilsTest2 { //不通过认证获取连接数据库对象 public static MongoDatabase getConnect(){ //连接到 mongodb 服务 MongoClient mongoClient = new MongoClient("10.58.225.161", 27017); //连接到数据库 Mongo

2021-06-28 15:27:50 3179

原创 简单工厂模式

面向对象编程优点可维护:可在不影响别的模块的情况下修改只想改的地方可复用:可以在别处被调用可扩展:可在不影响别的模块的情况下添加灵活性好:当需求有轻微改动时,可满足需求如何实现以上优点?封装:将有相似功能的程序封装在一个方法、类中;例如,在计算器小程序中,将加减乘除封装在一个类中,将接收用户输入的模块封装在另一个类中继承:多态:...

2021-06-27 22:01:52 78

原创 HTTP请求响应概述(NF!)

1. HTTP请求结构一个HTTP请求报文由请求行(request line)、请求头(header)、空行和请求数据(body)4个部分组成,如下所示:如下是一个实际的HTTP请求报文:请求行格式是请求方法 URL HTTP版本,例如,GET / HTTP/1.1表示使用GET请求,URL是/,版本是HTTP/1.1。请求头header由键值对组成,告知服务端客户端请求的信息。GET和POST中均有。常用请求头信息对照表如下:Header解释示例Accept指

2021-06-25 12:13:03 218

原创 1047. 删除字符串中的所有相邻重复项(Easy)

题目题目及示例我的题解class Solution { public String removeDuplicates(String s) { Stack<Character> stack = new Stack<>(); stack.push(s.charAt(0)); for (int i = 1; i < s.length(); i++) { char thisChar = s.char

2021-06-22 09:44:31 50

转载 oracle数据库导出所有表名及其结构

查询数据库中所有的表名、列名、列格式及列描述。SELECT t.table_name, t.colUMN_NAME, t.DATA_TYPE || '(' || t.DATA_LENGTH || ')', t1.COMMENTS FROM User_Tab_Cols t, User_Col_Comments t1WHERE t.table_name = t1.table_name AND t.column_name = t1.column_name;

2021-06-17 11:13:01 1631

原创 852. 山脉数组的峰顶索引(Easy)

题目题目及示例我的题解两头找变化趋势不同的值,可加速。class Solution { public int peakIndexInMountainArray(int[] arr) { for (int i = 0; i < arr.length; i++) { if (arr[i] > arr[i + 1]) { return i; } if (arr[arr

2021-06-15 20:38:07 122 1

原创 1893. 检查是否区域内所有整数都被覆盖(Easy)

题目题目及示例我的题解class Solution { public boolean isCovered(int[][] ranges, int left, int right) { int[] numFre = new int[51]; for (int i = left; i <= right; i++) { numFre[i] = 1; } for (int[] r : ranges) {

2021-06-15 09:52:51 154

原创 1899. 合并若干三元组以形成目标三元组(Medium)

题目题目及示例我的题解triplets中的数组一一与target中对比,如果有大于target的数,则不能加入运算;如果有等于target的数,则可以确定在target中的位置。class Solution { public boolean mergeTriplets(int[][] triplets, int[] target) { boolean[] confirmed = new boolean[3]; for (int[] triplet : trip

2021-06-15 09:45:58 141

原创 1897. 重新分配字符使所有字符串都相等(Easy)

题目题目及示例我的题解记录每个字母出现的频率,除以单词数量看能否除尽。class Solution { public boolean makeEqual(String[] words) { int[] charFre = new int[26]; for (String word : words) { for (int j = 0; j < word.length(); j++) { charFre

2021-06-15 09:31:20 98

原创 lombok注解

@Slf4j日志记录注解,相当于定义private final Logger logger = LoggerFactory.getLogger(当前类名.class),直接使用log.info()记录日志注解@Slf4j的使用

2021-06-10 16:37:44 90

原创 Java注解概述

@ Named功能:一个接口被多个实现类接入,通过@Named中的Value值来确定哪个实现类中的方法被调用使用@Named注解(一个接口多个实现,匹配引入想要的实现类)List item

2021-06-10 16:37:36 105

空空如也

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

TA关注的人

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