自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 自己实现序列化和反序列化的过程

自己实现序列化和反序列化的过程这个问题是我在进行单例模式学习的过程中遇到的,如果实现了序列化接口, 还要做什么来防止反序列化破坏单例?答:实现readResolve方法,直接将对象返回。因为如果已经实现了readResolve方法,反系列化后就会直接使用readResolve的返回值

2024-05-10 15:07:26 871

原创 异或相关概念及习题

在Java中,异或运算是以二进制的形式进行计算的,当进行异或运算时,会先把两个数值转换成二进制,在进行异或运算。运算规则:在同位上的数值,相同则为0(都是0或者都是1),不同则为1(一个为0一个为1)运算定理:1、结合律:(ac=ac)2、交换律:aa3、与自身异或:a^a=04、与0异或:a^0=a。

2022-12-14 20:41:03 292 1

原创 持久层框架设计实现及MyBatis源码分析 ---- MyBatis基础回顾及高级应用

where + if 标签where标签mybatis会自动添加where语句,if标签根据if条件,如果成立,会为后面多个判断语句添加and(第一个除外)foreach 标签foreach标签的属性含义如下:• collection:代表要遍历的集合元素。作为入参,对象为list、array时,collection属性值分别默认用"list"、"array"代替,Map对象没有默认的属性值。

2022-11-30 20:43:02 647

原创 持久层框架设计实现及MyBatis源码分析 ---- 自定义持久层框架

1、 数据库连接创建、释放频繁造成系统资源浪费,从⽽影响系统性能。2、 Sql语句在代码中硬编码,造成代码不易维护,实际应⽤中sql变化的可能较⼤,sql变动需要改变java代码。3、 使⽤preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不⼀定,可能多也可能少,修改sql还要修改代码,系统不易维护。4、 对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据 库记录封装成pojo对象解析⽐较⽅便。

2022-10-17 22:00:40 476

原创 动态规划习题(二)

0-1 背包问题 (暴力递归 / 动态规划)规定1和A对应、2和B对应、3和C对应…26和Z对应那么一个数字字符串比如"111”就可以转化为:“AAA”、“KA"和"AK”给定一个只有数字字符组成的字符串str,返回有多少种转化结果三、LeetCode 691. 贴纸拼词暴力递归暴力递归.........

2022-06-20 18:21:51 196

原创 0-1背包问题 (暴力递归 / 动态规划)

给定两个长度都为N的数组weights和values,weights[i]和values[i]分别代表 i号物品的重量和价值给定一个正数bag,表示一个载重bag的袋子,装的物品不能超过这个重量返回能装下的最大价值

2022-06-20 16:17:28 453

原创 动态规划习题(一)

假设有排成一行的N个位置记为1~N,N一定大于或等于2开始时机器人在其中的start位置上(start一定是1~N中的一个)如果机器人来到1位置,那么下一步只能往右来到2位置;如果机器人来到N位置,那么下一步只能往左来到N-1位置;如果机器人来到中间位置,那么下一步可以往左走或者往右走;规定机器人必须走K步,最终能来到aim位置(P也是1~N中的一个)的方法有多少种给定四个参数 N,start,aim,K 返回能走到的方法数.........

2022-06-17 21:48:06 180

原创 逆序栈 (不申请额外的数据结构 / 递归)

逆序栈 递归

2022-06-10 21:31:16 106

原创 打印一个字符串的全排列 (递归)

字符串的全排列 递归

2022-06-10 20:52:09 198

原创 打印一个字符串的全部子序列 (递归)

字符串子序列 递归

2022-06-10 16:23:32 368

原创 汉诺塔问题 (递归)

汉诺塔递归

2022-06-10 11:35:37 137

原创 Dijkstra算法 (迪杰斯特拉算法) (图 / 最短路径 / 加强堆)

迪杰斯特拉算法是由荷兰计算机科学家在1956年发现的算法,此算法使用类似广度优先搜索的方法解决了带权图的单源最短路径问题。它是一个贪心算法。

2022-06-09 11:04:13 378

原创 prim算法 (普利姆算法) (图 / 最小生产树)

prim算法(普利姆算法):对图G(V,E)设置集合S,存放已访问的顶点,然后每次从集合V-S中选择与集合S的最短距离最小的一个顶点(记为u),访问并加入集合S。之后,令顶点u为中介点,优化所有从u能到达的顶点v与集合S之间的最短距离。执行n次(n为顶点个数),直到集合S已包含所有顶点。......

2022-06-09 10:10:31 242

原创 Kruskal算法(克鲁斯卡尔算法) (图/最小生成树) (并查集)

最小生产数讲解克鲁斯卡尔(Kruskal)算法从另一途径求网的最小生成树。其基本思想是:假设连通网G=(V,E),令最小生成树的初始状态为只有n个顶点而无边的非连通图T=(V,{}),概述图中每个顶点自成一个连通分量。在E中选择代价最小的边,若该边依附的顶点分别在T中不同的连通分量上,则将此边加入到T中;否则,舍去此边而选择下一条代价最小的边。依此类推,直至T中所有顶点构成一个连通分量为止............

2022-06-09 08:55:14 352

原创 图的数据结构表示、遍历

图的结构化实例BFS 广度优先遍历DFS 深度优先遍历图的拓扑排序拓扑序列:一些活动,其中某些活动必须在另一些活动完成之后才能开始,一定是无环的有向图,称为AOV网。拓扑排序:其实就是对一个有向图构造拓扑序列的过程。构造时会有两个结果:如果此网的全部结点都被输出,则说明其为不存在环的AOV网。如果没有输出全部顶点数,则说明这个网存在回路,不是AOV网。拓扑排序基本思路:从AOV网中选择一个入度为0的顶点输出,然后删去此结点,并删除以此结点为尾的弧,继续重复此步骤,直到输出全部顶点或者AOV网

2022-06-07 18:28:33 203

原创 LeetCode 305. 岛屿数量 II (并查集)

LeetCode 305. 岛屿数量 II (并查集)

2022-06-06 10:22:46 166

原创 200. 岛屿数量 (递归 / 并查集)

并查集 岛屿数量

2022-06-06 09:12:48 191

原创 并查集的实现 及 相关题目

并查集的本质是通过一个一维数组来维护一个森林。开始时森林中的每一个节点都是孤立的,各自形成一个树。之后,进行若干次的合并操作,每次合并将两个树合并为一个更大的树。相关题目LeetCode 547. 省份数量...

2022-06-04 12:21:30 145

原创 路灯问题 (贪心算法)

给定一个字符串str,只由’X’和’.'两种字符构成‘X’表示墙,不能放灯,也不需要点亮;’.'表示居民点,可以放灯,需要点亮如果灯放在i位置,可以让i-1,i和i+1三个位置被点亮返回如果点亮str中所有需要点亮的位置,至少需要几盏灯...

2022-06-03 21:51:08 516

原创 LeetCode 502. IPO (贪心算法)

IPO 贪心算法

2022-06-03 21:17:47 285

原创 分金问题 返回分割的最小代价 (贪心算法)

一块金条切成两半,是需要花费和长度数值一样的铜板比如长度为20的金条,不管怎么切都要花费20个铜板,一群人想整分整块金条,怎么分最省铜板?例如,给定数组{10,20,30},代表一共三个人,整块金条长度为60,金条要分成10,20,30三个部分。如果先把长度60的金条分成10和50,花费60;再把长度50的金条分成20和30,花费50;一共花费110铜板但如果先把长度60的金条分成30和30,花费60;再把长度30金条分成10和20,花费30;一共花费90铜板 输入一个数组,返回分割的最小代价本

2022-06-03 20:37:49 383

原创 最多宣讲场次 (贪心算法)

一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目的宣讲,给你每一个项目开始的时间和结束的时间你来安排宣讲的日程,要求会议室进行的宣讲的场次最多,返回最多的宣讲场次

2022-06-03 20:09:16 152

原创 拼接字符串,结果中字典序最小 (贪心算法)

给定一个由字符串组成的数组strs,必须把所有的字符串拼接起来,返回所有可能的拼接结果中字典序最小的结果将字符序列排序,排序的规则就是,如果a拼b 小于 b拼a,就将a放到前面;然后遍历整个排好序的字符串直接拼接,就是贪心后的字典序最小的字符串...

2022-06-03 11:42:32 347

原创 派对的最大快乐值 (二叉树的递归套路)

员工信息的定义如下:公司的每个员工都符合 Employee 类的描述。整个公司的人员结构可以看作是一棵标准的、 没有环的多叉树树的头节点是公司唯一的老板,除老板之外的每个员工都有唯一的直接上级叶节点是没有任何下属的基层员工(subordinates列表为空),除基层员工外每个员工都有一个或多个直接下级这个公司现在要办party,你可以决定哪些员工来,哪些员工不来,规则:’给定一棵多叉树的头节点boss,请返回派对的最大快乐值。只分两种所以根据二叉树的递归套路,我们需要获得的信息就是当前节点X来时的最

2022-06-03 10:02:02 240

原创 LeetCode 450. 删除二叉搜索树中的节点 (递归)

删除二叉搜索树中的节点

2022-06-02 11:40:35 121

原创 二叉树中最大二叉搜索子树的头结点 (二叉树的递归套路)

给定一颗二叉树的头结点head,返回这个二叉树中最大二叉搜索子树的头结点

2022-06-01 10:44:19 155

原创 二叉树的递归套路

二叉树的递归套路相关题目判断二叉树是不是满二叉树 LeetCode 543. 二叉树的直径最大的二叉搜索子树

2022-05-31 10:47:54 72

原创 最大的二叉搜索子树 (二叉树递归套路)

给定一棵二叉树的头节点head,返回这颗二叉树中最大的二叉搜索子树的大小思路若当前不以x为头,那么看:x的左树中最大二叉搜索子树的大小x的右树中最大二叉搜索子树的大小若当前节点为x为头,那么看经过x的树是不是二叉搜索树;3. x的左子树是不是二叉搜索树4. x的右子树是不是二叉搜索树5. 左树的max < x6. 右树的min > x7. 左树的大小 + 右树的大小 + 1,就是当前二叉搜索子树的大小代码实现public class Code05_MaxSubBSTS

2022-05-31 10:36:17 145

原创 判断二叉树是不是满二叉树 (二叉树的递归套路)

思路主要思路是:满二叉树的高度为h,那么它的节点数为2h-1所以按照二叉树递归套路,创建Info类,其中保存当前节点的高度和其下节点数代码实现public class Code04_IsFull { public static class Node { public int value; public Node left; public Node right; public Node(int data) { .

2022-05-31 09:48:49 299

原创 LeetCode 543. 二叉树的直径 (二叉树递归套路)

思路代码实现public class Code06_MaxDistance { public static class Node { public int value; public Node left; public Node right; public Node(int data) { this.value = data; } } public static cla.

2022-05-29 13:40:21 1184

原创 判断二叉树是不是完全二叉树 (层序遍历 / 二叉树递归套路)

思路非递归:代码实现// 非递归public static boolean isCBT1(Node head) { if (head == null) { return true; } Queue<Node> queue = new LinkedList<>(); queue.add(head); // 叶子节点标志 boolean leaf = false; while (!queue.isEmpt.

2022-05-29 10:15:28 390

原创 LeetCode 1021. 删除最外层的括号 (栈 / 字符串)

思路这道题可以用栈来找出所有原语分解,然后对每个分解后的去除最左边和最右边的括号最后连在一起即可,但是这种复杂度较高。由于题中说了S一定是合法的,我们就可以用统计左括号的个数的方法直接过滤掉每个原语的最外层括号。代码实现// 时间复杂度较高class Solution { public String removeOuterParentheses(String s) { Stack<Character> stack = new Stack<>().

2022-05-28 09:11:13 178

原创 求二叉树某个节点的后继节点

求二叉树某个节点的后继节点二叉树结构如下定义:Class Node {V value;Node left;Node right;Node parent;}给你二叉树中的某个节点x,返回该节点的后继节点思路根据中序遍历找后继节点O(n)根据中序遍历的特性,中序序列中一个节点的下一个节点,就是该节点的后继节点首先根据给出的节点x,可以找到这个树的根节点;根据这个找到的根节点,可以写出这个树的中序遍历序列;在这个中序遍历序列中找x的下一个节点,就是x的后继节点根据题目给出二叉树结构来

2022-05-27 11:59:22 146

原创 求二叉树最宽的层有多少个节点 (层序遍历)

思路准备curEnd(表示当前层的结束节点)、nextEnd(表示下一层的结束节点)、curLevelNodes(表示当前层的宽度)、max(表示最大宽度)四个变量。curEnd修改为二叉树的头节点(其他均为默认值),头节点入队列。从队列中弹出一个节点,每出队一个节点则curLevelNodes加一,出队节点有左孩子则左孩子入队,有右孩子则右孩子入队,有节点入队则将nextEnd修改为当前入队的节点(为下一层查找做准备,就是找下层最右节点,作为一个标识)。判断第3步出队的节点是否等于curEnd。

2022-05-27 10:44:41 134

原创 LeetCode 431. 将N叉树编码为二叉树 (深度优先遍历)

思路代码实现(java)/*// Definition for a Node.class Node { public int val; public List<Node> children; public Node() {} public Node(int _val) { val = _val; } public Node(int _val, List<Node> _children) { .

2022-05-26 23:28:44 134

原创 二叉树前序、中序、后序遍历(递归、非递归)

递归package class10;public class Code02_RecursiveTraversalBT { public static class Node { public int value; public Node left; public Node right; public Node(int v) { value = v; } } // 先序打印所有节点 public static void pre(Node head) { if (

2022-05-26 21:48:34 96

原创 LeetCode 124. 二叉树中的最大路径和 (递归)

思路代码实现/** * 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, TreeNode r.

2022-05-26 00:11:51 191

原创 链表相关面试题

判断链表是否为回文结构给定一个单链表的头节点head,请判断该链表是否为回文结构思路1. 额外空间占用为O(n)的,使用额外空间2. 额外空间占用为O(1)的,不使用额外空间代码实现将链表按n划分成左边<n、中间==n、右边>n给定一个单链表的头节点head,给定一个整数n,将链表按n划分成左边<n、中间==n、右边>n思路1. 额外空间占用为O(n)的,使用额外空间2. 额外空间占用为O(1)的,不使用额外空间代码实现复制一个特殊结构的单链表一

2022-05-25 19:47:10 233

原创 LeetCode 965. 单值二叉树 (递归)

思路如果根节点为null,返回true。如果根节点值和左右子树值相同并且左右子树都是单值树返回true代码实现/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } .

2022-05-24 09:05:18 81

原创 LeetCode 464. 我能赢吗 (递归 / 位运算 / 博弈论)

思路首先判断特例:如果最大能选择的数字maxChoosableInteger比期望的总数desiredTotal要大,先手稳赢,返回True如果能选择的所有数字总和比期望的总数desiredTotal要小,一定到达不了desiredTotal,先手稳输,返回False用二进制位来标记某个数是否已被选择,比如01表示1已被选择,10表示2已被选择,11表示1和2都被选择,100表示3被选择,以此类推,1 << i 表示 i + 1已被选择n个数共有2n种被选择与否的状态.

2022-05-22 10:44:09 360

空空如也

空空如也

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

TA关注的人

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