- 博客(54)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 暴力递归算法例题
汉诺塔打印字符串所有子序列打印字符串的全部排列栈逆序转化数字字符为字符串装下最多价值的物品最后获胜者的分数暴力递归-N皇后问题以及优化声明一下,以上代码均整理自左程云算法课程...
2021-11-17 18:59:52
123
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 二叉树--初级基础算法题
声明一下,这部分的代码都是根据左程云老师的算法课程整理出来的代码,如果有兴趣的同学可以去B站看相应的算法课程,一定要多敲代码,一定要多敲代码,一定要多敲代码。 重要的事情要说3遍。1. 二叉树的前,中,后序遍历2. 求一棵二叉树的宽度3. 判断是否是搜索二叉树4. 是否是完全二叉树5. 树型动态规划(是否是满二叉树,是否是平衡二叉树,是否是搜索二叉树)6. 二叉树公共节点7. 在二叉树中找到一个结点的后继结点8. 二叉树的序列化与反序列化9. java折纸问题(转化为二叉树问题)..
2021-10-29 11:58:11
70
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 基础排序算法
简单排序(选择,冒泡,插入,二分查找)归并排序java堆排序java荷兰问题以及快速排序计数排序和基数排序所有代码都是根据左程云老师的算法课程整理出来的
2021-10-27 15:02:55
65
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 单链表算法题
我这边整理的左程云老师的算法基础课程关于单链表的算法题,主要是以下几个题目反转单链表和双链表判断单链表是否是回文链表打印有序链表的公共部分单向链表按某值划分成左边小,中间相等,右边大的形式复制含有随机指针节点的链表两个单链表相交问题关于一些面试技巧:笔试时,一切为了时间复杂度,越快越好 面试时,时间复杂度也很重要,但是空间复杂度也要考虑到重要技巧额外的数据结构记录快慢指针(这个很重要)...
2021-10-15 11:18:59
144
原创 mybatis+MySQL 新增数据返回主键id问题
今天遇到个问题,怕自己又忘记,记录一下有个需求,需要存入数据到MySQL后要返回主键id,我按照以前设置的方式得到的结果始终是1,就非常奇怪,找了原因,记录一下int count = userMapper.insert(user);//拿到的是插入成功的数据条数int userId = user.getUserId();//拿到的是保存成功后返回的主键<insert id="insert" useGeneratedKeys="true" keyproperty="userId" paramT
2022-03-11 16:36:16
3055
原创 idea打开后不显示界面,win+D快捷键解决问题
本人用了外接显示屏,在操作的时候,一不小心把idea界面不知道拖到什么地方去了,死活展示不了。关机重启都没用,任务在运行,就是界面看不到。猜测肯定是在什么时候被我拖到什么看不到的角落去了。我尝试了多种方式,按照网上说的更改.idea文件夹内的workspace.xml内容,不行。最后,还是有味网友提供了个方法,适用于windows,win+D,多按几次,界面就出来了。这个我是有用的,其余各位我就不知道了,可以试试看原理不清楚,我一般按这个快捷键组合是为了快速还原桌面用的。...
2022-01-04 14:55:30
5554
41
原创 springboot升级log4j2,解决漏洞问题
最近log4j2爆出有重大漏洞问题,公司也紧急要求各个项目自己查验,要求将log4j的版本升到安全版本
2021-12-17 12:26:53
6718
1
原创 求最长回文子串的长度(manacher算法)
【题目】字符串str,求最长回文子串的长度【要求】时间复杂度为O(N)public class Manacher { private static char[] manacherString(String str){ char[] chars = str.toCharArray(); char[] arr = new char[2*chars.length+1]; int index = 0; for (int i = 0.
2021-12-01 19:26:59
328
原创 kmp算法
【题目】字符串str1和str2,str1是否包含str2,如果包含,返回str2在str1中的开始位置【要求】时间复杂度为O(N)public class KMP { private static int getIndexOf(String str1, String str2){ char[] arr1 = str1.toCharArray(); char[] arr2 = str2.toCharArray(); int[] next =.
2021-11-29 17:25:26
107
原创 并查集java
public class Code04_UnionFind { public static class Element<V>{ public V value; public Element(V value) { this.value = value; } } public static class UnionFindSet<V>{ public HashMap<
2021-11-24 18:48:00
199
原创 计算有多少个岛
【题目】一个矩阵中只有0和1两种值,每个位置都可以和自己的上下左右四个位置相连,如果有一片1连在一起,这个部分叫做一个岛求一个矩阵中有多少个岛public class Islands { public static int countIslands(int[][] m){ if (null == m || null == m[0]){ return 0; } int N = m.length; in.
2021-11-23 16:04:56
93
原创 哈希结构算法
【题目】设计一种结构满足如下3个功能insert(key):将某个key加入到该结构,做到不重复添加delete(key):将原本在结构中的某个key移除getRandom():等概率随机返回结构中任意key【要求】3个方法的时间复杂度要求O(1)public class RandomPool { public static class Pool<K>{ private HashMap<K, Integer> keyIndexMap; .
2021-11-18 16:29:10
97
原创 最后获胜者的分数
【题目】给定一个整型数组arr, 代表数值不同的纸牌排成一条线。 玩家A和玩家B依次拿走每张纸牌, 规定玩家A先拿, 玩家B后拿, 但是每个玩家每次只能拿走最左或最右的纸牌, 玩家A和玩家B都绝顶聪明。 请返回最后获胜者的分数【 举例】arr=[1,2,100,4]。开始时, 玩家A只能拿走1或4。 如果开始时玩家A拿走1, 则排列变为[2,100,4], 接下来玩家 B可以拿走2或4, 然后继续轮到玩家A…如果开始时玩家A拿走4, 则排列变为[1,2,100], 接下来玩家B可以拿走1或100.
2021-11-17 18:39:43
268
原创 装下最多价值的物品
【题目】给定2个长度为N的数组weights和values,weights[i]和values[i]分别代表第i个物品的重量和价值,给定一个正数bag,表示一个载重bag的袋子,泥状的额物品不能超过这个重量,返回能装下最多的价值public class Knapsack { public static int maxValue1(int[] weights, int[] values, int bag) { return process1(weights, values, 0.
2021-11-14 20:07:09
858
原创 转化数字字符为字符串
【题目】规定1和A对应,2和B对应,3和C对应,1-26对应26个字母那么一个数字字符串比如“111”,就可以转化为“AAA”,或者是“KA”,或者是“KA”给定一个只有数字组成的额字符串str,问返回有多少种转化结果public class ConvertToLetterString { private static int number(String str){ if (null == str || str.length() == 0){ r.
2021-11-14 19:07:31
231
原创 栈逆序java
【题目】在不借助其他数据结构的情况下,逆序栈public class ReverseStackUsingRecursive { private static void reverse(Stack<Integer> stack){ if (stack.isEmpty()){ return; } int i = getAndRemoveLastElement(stack); reverse(stac.
2021-11-12 17:26:48
789
原创 打印字符串的全部排列
【题目】打印字符串的全部排列,要求不要出现重复排列(假设全部字符都是小写字母)public class PrintAllPermutations { public static ArrayList<String> permutation(String str) { ArrayList<String> res = new ArrayList<>(); if (str == null || str.length() == 0) .
2021-11-11 16:53:37
212
原创 打印字符串所有子序列
【题目】打印一个字符串的所有子序列,包括空字符串public class PrintAllSubsquences { private static void printAllSubsquences(String str){ char[] chs = str.toCharArray(); process(chs,0); } //节省空间 private static void process(char[] chs, int i){ .
2021-11-10 16:19:39
208
原创 汉诺塔java
汉诺塔算法将所有的圆盘从最左侧杆移到最右侧杆,借助中间的杆public class Hanoi { private static void hanoi(int n){ if (n>0){ func(n, n, "left" , "right", "mid"); } } private static void func(int i, int j, String left, String right, String m
2021-11-09 17:26:16
370
原创 暴力递归-N皇后问题以及优化
在N*N的棋盘上摆N个皇后,要求任意两个皇后不同行,不同列,不在一条斜线上,给定一个整数n,返回n皇后的摆法有多少种。例如:n=1 返回1n=2 返回0n=3 返回0n=8 返回92public class NQueens { public static int num1(int n){ if (n < 1){ return 0; } int[] record = new int[n]; re.
2021-11-07 19:12:00
206
原创 贪心算法java
贪心算法最小字典序金条切割问题会议室宣讲次数问题获得最大钱数最小字典序给定一个字符串类型的数组strs,找到一种拼接方式,使得把所有字符串拼接起来以后形成的字符串具有最小的字典序public class LowestLexicography { public static class MyComparator implements Comparator<String>{ @Override public int compare(String o
2021-11-04 18:10:55
200
原创 前缀树java
一个字符串类型的数组arr1,另一个字符串类型的数组arr2,arr2中有哪些字符是arr1中出现的。arr2中有哪些字符是作为arr1中某个字符串前缀出现的,arr2中有哪些字符是作为arr1中某个字符串的前缀出现的,打印arr2中出现次数最大的前缀public class TrieTree { public static class TrieNode{ public int path; public int end; public Trie.
2021-11-03 17:46:15
103
原创 dijkstra算法以及优化
dijkstra算法Dijkstra算法是一种最短路径路由算法,用于计算一个节点到其他所有节点的最短路径无向图,但是必须给出初始节点public class Dijkstra { private static HashMap<Node, Integer> dijkstral(Node head){ HashMap<Node, Integer> distanceMap = new HashMap<>(); HashSet&.
2021-11-02 17:35:55
576
原创 prim算法
连通图里的所有顶点,且其所有边的权值之和亦为最小。选择一个点作为开始节点,遍历节点所有的边入优先级队列,选择权重最小的边,判断边的to节点是否已经加入过,如果已经加入过,则继续循环取出优先级队列中的节点,没有加入过,就将节点加入进来,再继续遍历to节点的所有边进入优先级队列,循环这些操作,直到优先级队列全部为空优先级队列,实际就是小根堆,每次取出的都是最小的元素public class Prim { public static class EdgeComparator impl.
2021-11-02 17:07:56
85
原创 kruskal算法
kruskal算法假设两点之间的边都有权重,那么将所有点加入成图后,要求所有权重和最小1.将所有边进行排序,由低到高2.所有的节点都是独立的集合3.选择从最小边开始,判断from 节点和to节点是否会形成环,不会,就将to节点加入进来,反之就不加判断两个节点是否会组成环,通过判断他们是否属于同一 个集合即可public class Code04_Kruskal { public static class MySets{ HashMap<Node, List<.
2021-11-01 17:56:21
119
原创 创建图java
生成图,可以将一些现有的数据转换成自己熟悉的方式,比如说下面的例子,将二维数组转变成了自己熟悉的图public class CreateGraph{ //matrix[i][0] weight //matrix[i][1] from //matrix[i][2] to public static Graph createGraph(Integer[][] matrix){ Graph graph = new Graph(); for (int i = 0
2021-11-01 17:09:47
507
原创 拓扑排序算法
熟悉java项目的同学,我可能会比较容易解释这个概念,在java项目中,一般会用到第三方jar包,而这些jar包可能会依赖其他的jar包,这样就形成了拓扑图。而在拓扑中,必定有一个jar包是不依赖其他任何jar包的,也就是入度为零的源节点,而且jar包不能互相形成循环,否则会出问题。所以拓扑排序适用于有向图,且必有入度为0的节点,不能有环public class TopologySort { private static List<Node> sortedTopology(Grap
2021-10-31 20:02:12
199
原创 图的宽度优先遍历以及深度优先比遍历
图,和二叉树类似,只不过二叉树严格一个入点,2个出点。而图则不限制宽度优先遍历1.利用队列来实现2.将源节点依次按照宽度进队列,然后弹出3.每弹出一个结点,就该节点的多有邻接节点放进队列4.不断private void bfs(Node node){ if (null == node){ return; } LinkedList<Node> queue = new LinkedList<>(); HashSet<No.
2021-10-31 19:26:31
258
原创 java折纸问题(转化为二叉树问题)
一张纸条,由下向上对折,折痕凹,继续向上折,折痕分别是凹凹凸,以此类推给定一个输入参数N,代表纸条从下向上对折N次,请从上向下打印折痕的方向例如 n=1 凹 n=2 凹凹凸这道题可以转化为二叉树的问题第一次凹第二次 凹凹 凸第三次 凹 凹 凸凹 凸 凹 凸…………………………每次新增的线的凹凸性符合二叉树的规律,这道题可以转化为二叉树的问题来解决,每个父节点对应的都是凹,凸两个子节点,利用中序遍历来打印private void printFoldPa.
2021-10-29 11:49:11
351
原创 二叉树的序列化与反序列化
【题目】将一棵树转为字符串存在内存中,再将字符串转换还原成树【扩展】如何判断一棵树是不是另一棵树的子树可以将这个问题转化为一个字符串是否是另一个字符串的子串【思路】二叉树的先序遍历private String serialByPre(Node head){ if (null == head){ return "#_"; } String str = head.value + "_"; str += serialByPre(head.left);
2021-10-29 10:23:15
69
原创 在二叉树中找到一个结点的后继结点
【题目】/**在二叉树中找到一个节点的后继节点 * 【题目】 * 现在有一种新的二叉树节点类型如下 * public class Node { * public int vaule; * public Node left; * public Node right; * public Node parent; * * public Node(int vaule){ * this.value = value; * } *
2021-10-28 17:19:49
224
原创 二叉树公共节点
【题目】给定二叉树的两个二节点node1,node2,找出这两个节点的最低公共祖先节点【思路】2种情况1.node1是node2的祖先节点或者node2是node1的祖先节点2.node1和node2属于不同的子树【方法一】利用递归private Node lowestCommonAncestor(Node head, Node o1, Node o2){ if (head == null || o1 == head || o2 == head){ return head;
2021-10-28 16:49:58
329
原创 树型动态规划(是否是满二叉树,是否是平衡二叉树,是否是搜索二叉树)
树型动态规划,每次的主要步骤一样,利用递归实现。一般遇到如下情形, 每次只需要获得左子树的信息和右子树的信息,再对得到的信息进行处理,周而复始这样的步骤,就可以使用树型动态规划模式实现功能。满二叉树二叉树,树的深度为k,节点个数为n,满足2^(k-1)==n,即为满二叉树判断是否是满二叉树,可以利用它的特点,遍历出二叉树的深度和节点个数,是否满足公式即可。得到左子树的深度和节点个数,得到右子树的深度和节点个数,对两个子树的深度和节点个数进行处理,得到当前树的深度和节点个数,周而复始,直到递归结.
2021-10-27 14:58:32
122
原创 2021-10-26遇到的mysql存字符串数据的问题 Incorrect string value: ‘\xF0\x9F\x8E\xB9‘ for column ‘remark‘ at row 45
今天测试上传excel文件,将数据存入到数据库的功能时,遇到一个问题,在存一个字符串时报错Incorrect string value: ‘\xF0\x9F\x8E\xB9’ for column ‘remark’ at row 4510一直在报字符串错误数据,就很奇怪。后来查了一下,有特殊字符,这个字符是4个字节的,但是连接mysql我设置的utf-8,而UTF-8是3个字节,我不能改mysql整体的属性,就只能该自己的表,但是改成utf8mb4,刚改完是生效,但是一会儿后就又不生效了。后来看到
2021-10-26 17:16:38
361
原创 是否是完全二叉树
【题目】判断二叉树是否是完全二叉树【思路】1.如果当前节点有右子节点,但没有左子节点,则不是完全二叉树2.在满足条件一,如果有右子节点,则必然存在左子节点。那么判断当前节点是否有右子节点,如果没有,那么在后面继续遍历的节点中,必定都不存在子节点,也就是说,后面遍历的节点,都是叶子节点,没有孩子节点private boolean isCBT(Node head){ if (null == head){ return true; } LinkedList<Node
2021-10-26 17:05:47
96
原创 判断是否是搜索二叉树
搜索二叉树,左边子树小于父节点,右边子树的每个节点大于父节点。标准搜索二叉树不会有相等的节点搜索二叉树进行中序遍历,应该是升序的,利用此特点来进行判断是否是搜索二叉树方式一 递归int preValue = Integer.MIN_VALUE;private boolean checkBST1(Node head){ if (null == head){ return true; } boolean isLeftBST = checkBST1(head.left.
2021-10-25 18:39:27
197
原创 求一棵二叉树的宽度
方式一利用hashmap记录每一个节点所在的层,利用队列进行宽度遍历hashmapprivate int getMaxWidth1(Node head){ int curMax = 0; int curLevel = 1; int curWidth = 0; HashMap<Node, Integer> map = new HashMap<>(); map.put(head,1); LinkedList<Node> .
2021-10-25 17:40:30
109
原创 二叉树的前,中,后序遍历
二叉树的前,中,后序遍历public static class Node { public int value; public Node left; public Node right; public Node(int value) { this.value = value; }}前序遍历1.递归方式private static void preOrderRecur(Node head){ if (null == head){
2021-10-24 19:22:26
83
原创 计数排序和基数排序
计数排序【思路】假设有n个非负数,最大的值为max,新建一个数组bucket,大小为max+1,即可以表示0~max的数字,数组的下标即表示一个数字,数组元素中存放的数字,则表示有多少个和下标相等的数字,假设某一个下标,5,bucket[5]=7,也就是说,5这个数字有7个。最后排列数据,从下标为0开始,依次存入到arr中。private void countSort(int[] arr){ if (null == arr || arr.length < 2){ return;
2021-10-22 17:23:48
81
原创 荷兰问题以及快速排序
荷兰问题(一)【题目】给定一个数组arr,和一个数num,请把小于等于num的数放在数组左边,大于num的数放在数组右边。【要求】额外空间复杂度O(1),时间复杂度O(N)private void sort(int[] arr, int left, int right, int num){ int less = left - 1; int more = right + 1; while(left < more){ if (arr[left]<=num){ swap(ar
2021-10-21 11:55:55
148
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人