自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(212)
  • 资源 (22)
  • 收藏
  • 关注

原创 通过删除字母匹配到字典里最长单词

通过删除字母匹配字典的最长单词

2022-10-07 11:36:40 169 1

原创 最小窗口字串

最下窗口字串

2022-10-06 17:16:59 180

原创 红黑树的简单实现

红黑树的简单实现:定义红黑树的结构package com.zzu.arth;public class TreeNode { private Integer value; private String color = "red"; private TreeNode left; private TreeNode right; private TreeNode parent; public TreeNode() { } public Tr

2021-11-08 21:02:06 150

原创 JVM的五种引用方式

1、强引用只有GC root对象都不通过[强引用]引用该对象时,该对象才可以被垃圾回收。2、软引用仅有软引用引用该对象时(没有强引用引用该对象),在垃圾回收后,内存依然不足的情况下,会再次触发垃圾回收,此时会回收软引用引用的对象。可以配合引用队列来释放引用本身public class TestPerson { public static final int _4MB = 4 * 1024*1024; public static void main(String[] args

2021-10-30 20:31:30 370

原创 public class 与class区别

类有两种修饰权限,public和没有修饰符,对与一个java文件,如果其定义有public修饰的类,那么此时文件名必须与其保持一致,且不能再定义其他用public 修饰的类,但可以定义多个没有修饰符的类如果一个java文件有public修饰的类,那么程序入口main方法一定在其中,如果时多个class类,没有public修饰的类,那么main方法放在与文件名保持一致的类中...

2021-10-23 18:56:15 199

原创 工厂设计模式

文章目录简单工厂模式抽象工厂模式简单工厂模式抽象工厂模式

2021-10-23 16:57:52 98

原创 寻找两个有序数组的中位数

题目分析寻找两个有序数组的中位数其实就想等价于寻找两个有序数组的第k个元素,k=(m+n)/2 + 1 (总元素个数为奇数的情况)//查询两个有序数组中的第k个元素,k是从1开始计算的 public int findKth(int[] A,int abegin,int aend,int[] B,int bbegin,int bend,int k) { int lenA = aend - abegin + 1; int lenB = bend - bbegin

2021-09-29 22:37:48 134

原创 词语序列问题

题目分析本题是求目标字符串在树中的层次,以start = “hit”,end=“cog”,dict={“hot”,“cog”,“dot”,“dog”,“hit”,“lot”,“log”}为例,树的孩子节点就是与dict中与父节点只有一个字母差异的字符串,当遍历到某个层次出现目标字符串即返回该层次,否则就不是最短变换长度。import java.util.*;public class Solution { public int res = 1; public int ladder

2021-09-28 21:26:18 126

原创 包围区域问题

题目分析被包围的区域一定没有与边界相连的O,因此可以利用深度优先遍历矩阵的四个边,把边上的O及其相连的O替换成其他字符,如*,然后再遍历矩阵把剩余的O替换成X,*替换成O。public class Solution { public void solve(char[][] board) { if(board.length == 0) { return; } boolean[][] visited = new boolea

2021-09-28 13:25:26 215

原创 字符反转问题

题目分析对一个字符循环右移k位(k小于等于字符长度n)的一般做法就是先将字符前(n-k)位和后k位分别翻转,最后再对字符整体翻转一次,因此对一个字符循环右移k位最多有三次翻转。如果n=1或者k =0,那么不需要翻转如果n=2且k=1时,只需要翻转一次如果k=1或者k=n-1,只需要翻转两次如果k=2或者k=n-2,只需要翻转两次,如12345,先将前四位翻转43215,再将后四位翻转45123,共需要翻转两次其余情况均翻转三次import java.util.*;public c

2021-09-14 09:56:28 83

原创 位数之和问题

题目分析暴力法。遍历所有长度为n的数,计算所有位数好之和为m的数的和回溯法。相当于有n个位置,除了第一个位置外(第一个位置不能放置0),其余位置可以放置0-9中的任意一个数,找出其中所有位置上的数和为m的所有排列情况。import java.util.*;public class Solution { /** * 返回这样的数之和 * @param n int整型 数的长度 * @param m int整型 各个为之和 * @return

2021-09-13 20:44:55 234

原创 牛牛排队问题

题目分析思路:这道题存在一个问题,就是如果数组中元素过大时,就会存在很多次无用的循坏,因此需要想办法优化掉这些循环。我们考虑数组中的最小值min1、如果min<(n-1),那么循环一次或者两次就可以找出进门的位置(如果min后面有小于n-1的元素,那么只需要一次循环就可以找出,否则在第二次循环中,门的位置一定是0~min所在的位置)2、如果min>(n-1),此时经过min/(n-1)一定不会出现门口位置有小于0的情况,那么此时各个门口剩余人数的情况,假设min所在位置剩余人数为r

2021-08-10 10:15:30 184

原创 划分链表问题

题目分析题目的意思是将小于x的节点全部放在大于或者等于x节点的左侧,且节点之间的相对位置不发发生改变。思路:首先设置两个指针slow和fast,slow指针指示小于x的节点,fast指针指示大于或者等于x的节点,遍历链表,如果当前节点值小于x,则将其加入到slow节点后,同时更新slow指向当前节点,否则将当前节点加入到fast后,更新fast指向当前节点。import java.util.*;/* * public class ListNode { * int val; *

2021-08-09 21:59:07 73

原创 数组中只出现一次的数(其它数出现k次)

题目分析我们把每个数看成二进制,统计所有元素相同位置的1的个数假设为counter,然后counter对k求余,余数就是出现一次的元素二进制在该位置上的0或者1。import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param arr int一维数组 * @param k int * @re

2021-08-09 21:21:33 212

原创 最大公约数

题目分析原理:辗转相除法(欧几里得算法)假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:1997 / 615 = 3 (余 152)615 / 152 = 4(余7)152 / 7 = 21(余5)7 / 5 = 1 (余2)5 / 2 = 2 (余1)2 / 1 = 2 (余0)至此,最大公约数为1以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。证明:a可以

2021-08-09 20:34:42 424

原创 栈和排序问题

题目分析本题的意思就是找出按照当前入栈顺序,其所有出栈顺序中字典序最大的出栈序列,思路:1、遍历数组,假设此时元素是a[i],将a[i]加入到栈中2、循环判断判断栈顶元素,是否大于a[i+1]~a[a.length-1]所有的元素,如果是,则将栈顶元素弹出。3、遍历完数组如果栈非空,则弹出剩余元素。import java.util.Stack;public class Solution { /** * 栈排序 * @param a int整型一维数组 描述入栈

2021-08-07 22:02:43 186

原创 旋转字符串

题目分析1、常规思路:遍历字符串A,从当前位置把A分割head和tail两部分字符串,然后按照tail+head拼接字符串,比较其与B是否相等,相等就返回true,如果遍历完没有返回true,就返回falseimport java.util.*;public class Solution { /** * 旋转字符串 * @param A string字符串 * @param B string字符串 * @return bool布尔型 *

2021-08-06 22:40:38 67

原创 数独游戏问题

题目分析数独游戏解析public class Solution { //数独游戏 public void solveSudoku(char[][] board) { helper(board); } //这里的返回值用于指示是否找到一组正确的解, //如果找到一组解,则程序就可以结束而不至于回溯所有情况 public boolean helper(char[][] board) { for(int i = 0; i

2021-08-06 17:16:30 133

原创 最小生成树

题目分析Kruskal算法import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 返回最小的花费代价使得这n户人家连接起来 * @param n int n户人家的村庄 * @param m int m条路 * @param cost int二维数组 一维3个参数,表示连接1个村庄到另外1个村庄的花费的代

2021-08-06 15:03:45 61

原创 KMP算法

next数组相关概念借助算法导论的一段话解释前缀和后缀的含义。举个例子,假设有字符串“abcd”,那么1、前缀:a,ab,abc,abcd,2、后缀:d,cd,bcd,abcd,当然空串即是前缀也是后缀。但是在求解next数组中的前缀和后缀时,前缀是不包含末尾的那一个字符,后缀不包含首位字符,这是因为如果包含的情况下,那么前缀和后缀的最长公共子串永远就是字符串本身。这里声明一下:模式串从下标0开始,因此next[0] = -1,如果模式串从下标1开始,那么next数组所有元素加1。nex

2021-08-06 11:01:34 127

原创 比较版本号

题目分析思路:通过字符.对字符串进行分割,然后比较每一部分的大小。import java.util.*;import java.util.regex.Pattern;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 比较版本号 * @param version1 string字符串 * @param version2 string字符串

2021-08-05 14:59:56 85

原创 分糖果问题

题目分析思路:1、初始化一个数组dp,并全部填充为1,dp[i]表示当前孩子分配的糖果数;2、从左向右遍历,如果arr[i+1] > arr[i],那么dp[i+1] = dp[i]+1;3、从右向左遍历,如果arr[i-1] > arr[i]&&dp[i-1] <= dp[i],那么dp[i-1] = dp[i]+1;4、对dp累加和即为最小糖果数。import java.util.*;public class Solution { /**

2021-08-05 10:46:12 114

原创 未排序数组中累加和为给定值的最长子数组长度

题目分析解法:哈希假设s(i)是子数组arr[0…i]的累加和,那么s(j)就代表arr[0…j]的累加和,那么可求得arr[j+1…i]=s(i)-s(j)。流程:1.初始化变量sum=0,表示从arr[0]一直加到arr[i]的累加和。初始化变量len,表示累加到和为k的最长子数组长度。设置一个map,用来记录出现过的sum值和的它出现的最早位置,即第一次出现的位置。key代表出现过的sum,value代表第一次出现的位置。令sum+=arr[i],即s(i),然后在map中查看是否出现过

2021-08-04 21:11:11 254

原创 完全二叉树的节点数

题目分析假设完全二叉树的高度为h,那么完全二叉树的节点数num=2(h−1)−1+counternum = 2^{(h-1)}-1+counternum=2(h−1)−1+countercounter是最后一层的节点数/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this

2021-08-03 23:32:21 150

原创 数组中的最长连续子序列

题目分析题目意思:找出最长的连续子序列,在原数组中,这些元素的位置不一定相邻,也不一定按照大小顺序排列,如示例1中[4,1,3,2]为连续子序列,但是它们不相邻并且没有排序。1、对数组进行排序,找出其中最大的连续序列import java.util.*;public class Solution { /** * max increasing subsequence * @param arr int整型一维数组 the array * @return int整

2021-08-03 21:19:16 888

原创 找到搜索二叉树中两个错误的节点

分析二叉搜索树的中序遍历是一个升序序列,而交换其中两个节点后的遍历序列中可能会有两个逆序对,如(1,2,3,4,5)交换2和4(1,4,3,2,5),存在逆序对(4,3)和(3,2),第一个逆序对的第一个数个第二个逆序对的第二个数就是二叉树中交换的两个数;如果遍历序列中只有一个逆序对,那么逆序对中的两个数就是交换的两个数。代码:import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left.

2021-07-30 21:19:09 269

原创 阶乘末尾0的数量

分析分析规律可知,如果要产生一个0,必是 2 * 5,因此就转化成要做出1~n中有多少对2和5,但是可以分解出2的数显然比可以分解出5的数要多,因此5的数量显然比2少,故只需要找出1~n中5的数量即可。而要找出某个数k在1~n中出现的次数,其公式为:count=n/k+n/k2+n/k3+n/k4.....count = n / k + n / k^2 +n/k^3+n/k^4.....count=n/k+n/k2+n/k3+n/k4.....代码如下:import java.util.*;.

2021-07-30 16:40:09 178

原创 矩阵最长递增路径

分析深度优先遍历:将矩阵看成一个有向图,每个单元格对应图中的一个节点,如果相邻的两个单元格的值不相等,则在相邻的两个单元格之间存在一条从较小值指向较大值的有向边。问题转化成在有向图中寻找最长路径。深度优先搜索是非常直观的方法。从一个单元格开始进行深度优先搜索,即可找到从该单元格开始的最长递增路径。对每个单元格分别进行深度优先搜索之后,即可得到矩阵中的最长递增路径的长度。但是如果使用朴素深度优先搜索,时间复杂度是指数级,会超出时间限制,因此必须加以优化。朴素深度优先搜索的时间复杂度过高的原因是进行.

2021-07-30 15:32:36 135

原创 判断t1树中是否有与t2树拓扑结构完全相同的子树

分析1、在t1中找到与t2具有相同值的节点,然后判断这两个节点是否具有相同的拓扑结构(注意t1中可能存在多个与t2具有相同值的节点)代码:import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */public class Solution { /** * * @p.

2021-07-29 20:33:36 449

原创 通配符匹配

分析参考正则表达式匹配递归写法: public boolean isMatch(String s, String p) { if(p.length() == 0) { return s.length() == 0; } if(s.length() <= 0) { boolean same = true; for(int i = 0; i < p.length(); i+.

2021-07-29 20:12:33 87

原创 股票(无限次交易)

分析将数组中的点描述在坐标中,并使用平滑的曲线连接,则最大收益就是所有上升曲线段最大值减去最小值的叠加。import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算最大收益 * @param prices int整型一维数组 股票每一天的价格 * @return int整型 */ public int maxPr.

2021-07-29 17:13:42 94

原创 把数字翻译成字符串

分析动态规划,设dp[i]表示前i个字符的编码样式的数量1、如果nums以0开头,直接返回0,因为0没有编码规则,而像“0”加上一个非零数字组成的两位数也是不存在编码规则2、如果nums中存在两个及以上连续的0,直接返回03、如果nums[i-1] = ‘0’,nums[i-2]和nums[i-1]组成的数字在[1,26]之间,那么dp[i] = dp[i-2],如果组成的数字不在[0,26]之间,那么nums的编码样式为04、如果nums[i-1] != ‘0’,此时dp[i] = dp[i.

2021-07-29 14:24:25 106

原创 子数组最大乘积

分析此题可以运用动态规划解决:设f[i]表示以i为结尾的最大值,g[i]表示以i结尾的最小值,那么f[i+1] = max{f[i]*arr[i+1], g[i]*arr[i+1],arr[i+1]}g[i+1] = min{f[i]*arr[i+1], g[i]*arr[i+1],arr[i+1]}考虑到f[i],g[i]只和i-1有关,那么可以用局部变量即可搞定,而不用使用数组。public class Solution { public double maxProduct(do.

2021-07-29 11:08:15 54

原创 N皇后问题

分析n皇后问题使用二维数组记录访问过的位置:import java.util.*;public class Solution { /** * * @param n int整型 the n * @return int整型 */ public int res = 0; public int Nqueen (int n) { helper(n,0,new boolean[n][n]); return r.

2021-07-28 19:07:44 49

原创 随时找到数据流的中位数

分析这里观察示例,如果数据流为空取中位数返回值为-1取一个有序序列的中位数,可以从中位数的位置将左右两部分看成是左边部分是一个大根堆,右边部分是一个小根堆,通过维持两个堆来获取中位数1、如果大根堆和小根堆的大小相等,那么先把数加入小根堆,然后弹出小根堆的堆顶元素加入大根堆2、如果大根堆和小根堆的大小不想等(大根堆比小根堆多一个),先把元素加入大根堆,然后弹出大根堆的元素加入小根堆3、如果两个堆的大小相等,那么中位数就是两个堆顶元素相加除以2,如果不想等,中位数就是大根堆的堆顶元素。impor..

2021-07-28 17:03:56 151

原创 正则表达式匹配

分析递归: public boolean matches(String str,String pattern) { //如果匹配规则为空,那么只有当字符串为空时才匹配 if(pattern.length() <= 0) { return str.length() <= 0; } //匹配第一个字符 boolean match = (str.length() > 0 &&am.

2021-07-28 15:55:27 83

原创 最大正方形

分析dp[i][j]表示以(i,j)为正方形右下角的最大边长,那么存在dp[i][j]=min{dp[i−1][j],dp[i][j−1],dp[i−1][j−1]}+1dp[i][j] = min\{dp[i-1][j],dp[i][j-1],dp[i-1][j-1]\}+1dp[i][j]=min{dp[i−1][j],dp[i][j−1],dp[i−1][j−1]}+1import java.util.*;public class Solution { /** * 最大正.

2021-07-27 20:24:27 77

原创 最小覆盖子串

分析思路:1、利用双指针left和right维持一个窗口,起始left=right=0;2、右指针不断右移,直到所有的所有的字符都被包含在这个窗口内3、此时移动左指针,直到恰好有一个字符没有被包含在窗口内,在移动的过程中更新最小间距,并记录最短子串的开始位置4、继续重复2,3步骤,直到右指针到达字符串末尾代码:import java.util.*;public class Solution { /** * * @param S string字符串 .

2021-07-27 19:17:47 50

原创 换钱的最少货币数

分析如果arr的长度为N, 则生成一个行数为N, 列数为aim+1的动态规划表dp[N][aim+1], dp[i][j]的含义为:在可以任意使用arr[0…i]货币的情况下,组成j所需的最小张数。设: arr=[5,2,3,1] aim = 51、dp[0…N-1][0]的值表示找钱数为0时需要的最少张数,所以全设为0。(矩阵的第一列)2、dp[0][0…aim]的值表示只能使用arr[0]货币也就是5的情况下,找0 ,1,2,3,4,5的钱的情况下。其中无法找开的一律设为32位的最大值,记为m.

2021-07-27 16:12:32 159

原创 集合的所有子集

题目分析1、对于数组S中每个元素有两种选择,要么选入子集,要么不选入子集,因此可以用比特位表示对应元素是否被选中,如{1,2,3},其对应的情况是000-111(0表示不选中,1表示选中)import java.util.*;public class Solution { public ArrayList<ArrayList<Integer>> subsets(int[] S) { //对数组进行排序 Arrays

2021-07-20 21:34:57 310

elasticsearch.6.2.4-linux安装包.zip

linux版的elasticsearch-6.2.4安装包

2021-01-22

最近最久未使用(LRU)置换算法

操作系统课程最近最久未使用(LRU)置换算法,程序相对简单,通过这个模拟程序能够帮助学习者会更好的学习os,供有需要的人学习使用。

2019-11-26

Shiyan5.java

操作系统课程循环首次适应算法模拟内存分配,程序相对简单,通过这个模拟程序能够帮助学习者会更好的学习os,供有需要的人学习使用。

2019-11-26

操作系统死锁检测与解除

操作系统课程操作系统死锁检测与解除模拟程序,程序相对简单,通过这个模拟程序能够帮助学习者会更好的学习os,供有需要的人学习使用。

2019-11-26

PCBPM.java

操作系统课程优先级调度算法,程序相对简单,通过这个模拟程序能够帮助学习者会更好的学习os,供有需要的人学习使用。

2019-11-26

read_writer.cpp

操作系统课程读者写者问题模拟程序,程序相对简单,通过这个模拟程序能够帮助学习者会更好的学习os,供有需要的人学习使用。

2019-11-26

实现前趋关系并发.c

操作系统课程实现前趋关系并发模拟程序,程序相对简单,通过这个模拟程序能够帮助学习者会更好的学习os,供有需要的人学习使用。

2019-11-26

银行家算法(死锁检测).c

操作系统课程银行家算法,程序相对简单,通过这个模拟程序能够帮助学习者会更好的学习os死锁的检测预防,供有需要的人学习使用。

2019-11-26

时间片轮转调度模拟程序.c

操作系统课程时间片轮转调度模拟程序,程序相对简单,通过这个模拟程序能够帮助学习者会更好的学习os,供有需要的人学习使用。

2019-11-26

生产者消费者问题.c

操作系统课程生产者消费者问题模拟程序,程序相对简单,通过这个模拟程序能够帮助学习者会更好的学习os,供有需要的人学习使用。

2019-11-26

请求分页存储管理模拟.c

操作系统课请求分页存储管理模拟模拟程序,程序相对简单,通过这个模拟程序能够帮助学习者会更好的学习os,供有需要的人学习使用。

2019-11-26

内存的动态分区分配.c

操作系统课程内存的动态分区分配模拟程序,程序相对简单,通过这个模拟程序能够帮助学习者会更好的学习os,供有需要的人学习使用。

2019-11-26

单任务系统模拟程序c语言实现

操作系统课程单任务模拟程序,程序相对简单,通过这个模拟程序能够帮助学习者会更好的学习os,供有需要的人学习使用。

2019-11-26

1_网上购物商城系统.zip

小米商城,利用strut2和hibernate框架开发,功能较完善,可以实现基本功能,亲测可用,邮件注册登录,需要联网。

2019-06-21

js学习笔记

学习javascript时做的一些笔记和示例代码,需要的可以参考一下

2019-03-17

everything搜索工具

everthing是一款功能强大的全局搜索工具,搜索速度快而且占用资源少,电脑必备

2019-03-17

反编译软件gui

一款功能强大而且占用资源小的反编译软件,可以实现class文件反编译成java文件

2019-03-17

简单在线聊天室

java开发,,运用Struts2框架编写,简单易懂,可供参考。

2019-03-17

简单的博客(不含数据库)

一个简单的博客,下载后将这个war文件放在tomcat的webapps里后启动tomcat会解压出来一个文件夹,可以直接在游览器输入地址访问

2019-03-17

javaweb编写的简单购物网站,含数据库

java购物网站,含有后台数据库,含有文档和讲解视频。

2019-03-17

数据库连接

本资源是连接数据库的工具包,包括mysql5.0,jdbc驱动和数据库可视化界面Navicat

2018-12-04

web登录窗体

一个简单的登录窗体(含验证码验证),对网上各种资源进行查找,最终编写了这个程序

2018-10-07

空空如也

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

TA关注的人

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