自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 打印一个字符串全排列(不出现重复排列)

打印一个字符串全排列,不出现重复排列(递归实现)

2024-08-13 19:43:37 136

原创 打印一个字符串全排列

打印一个字符串全排列(递归实现)

2024-08-13 19:42:04 63

原创 打印一个字符串全部子序列(没有重复字面值)

打印一个字符串全部子序列(没有重复字面值)(递归解法)

2024-08-13 10:58:52 109

原创 打印一个字符串所有子序列

打印一个字符串所有子序列(递归解法)

2024-08-13 10:57:14 202

原创 逆序栈问题

逆序栈的递归实现,无申请额外数据结构

2024-08-12 18:56:30 139

原创 汉诺塔问题两种解法(暴力递归到抽象总结)

如何从六个嵌套递归找出本质,使代码简化更简洁易懂

2024-08-12 15:43:45 322

原创 java中的代码格式规范(阿里巴巴)

本文介绍了java中的代码格式的规范

2024-08-12 14:04:03 201

原创 java中的命名规范(阿里巴巴)

本文讲解了java中的常见命名准则

2024-08-12 13:23:29 161

原创 堆优化后的dijkstra算法

/编号为多少的点那个点的结构是什么。//传进来二维数组,每行有三个值,分别为权重,from和to这三个属性代表了每个点的结构。//调整堆顶和堆末的元素,使其堆顶的元素被删去,堆末的元素来到新的堆顶。//如果节点在堆中的位置有记录那么这个节点就曾经进来过这个堆。//如果一个节点在堆上,就记录它的index。//如果图里没有to这个点,就新建。

2024-08-10 23:24:32 421

原创 dijkstra算法详解

/编号为多少的点那个点的结构是什么。//直接邻居,由自己出发能到达的点。//传进来二维数组,每行有三个值,分别为权重,from和to这三个属性代表了每个点的结构。//点上的值也就是编号。//如果图里没有from这个点,就新建。//如果图里没有to这个点,就新建。

2024-08-09 23:59:23 380

原创 图的最小生成树Prim算法

/编号为多少的点那个点的结构是什么。//如果已经考虑的边没有这个边,那么两个集合都要把这个边加进去。//传进来二维数组,每行有三个值,分别为权重,from和to这三个属性代表了每个点的结构。//如果边的另一端的点(解锁的点)的相邻边没有考虑,那么两个集合都要把这个边加进去。//根据权值排序,权值小的在左,权值大的在右。

2024-08-09 19:03:54 536

原创 图的最小生成树Kruskal算法

/ 存储图中的所有节点,键为节点值,值为节点对象。// 存储每个节点的父节点。// 邻接表,存储与该节点相连的其他节点。// 存储从该节点出发的边。// 获取起始节点和终止节点的对象。

2024-08-08 20:11:29 419

原创 图的拓扑排序

/编号为多少的点那个点的结构是什么。//把入度为零的邻居入度减少1(也可以理解为消除影响)添加进入度表中。//传进来二维数组,每行有三个值,分别为权重,from和to这三个属性代表了每个点的结构。//如果消除后入度为零,就添加进队列里。//key:某一个node value:剩余的入度。//将入度为零的点添加进result集合里。//如果点中有入度为零的就放进队列里。//剩余入度为零的点,才进这个队列。//放入每个点原始的入度。

2024-08-08 18:06:50 322

原创 图的宽度优先遍历和深度优先遍历

/编号为多少的点那个点的结构是什么。//直接邻居,由自己出发能到达的点。//传进来二维数组,每行有三个值,分别为权重,from和to这三个属性代表了每个点的结构。//所有的边装在边集里。//点上的值也就是编号。//如果图里没有from这个点,就新建。//如果图里没有to这个点,就新建。//从node出发,进行宽度优先遍历。//从node出发,深度优先遍历。

2024-08-08 15:47:16 462

原创 图的建立详细解析

/编号为多少的点那个点的结构是什么。//直接邻居,由自己出发能到达的点。//传进来二维数组,每行有三个值,分别为权重,from和to这三个属性代表了每个点的结构。//点上的值也就是编号。//如果图里没有from这个点,就新建。//如果图里没有to这个点,就新建。

2024-08-08 11:36:10 548

原创 并查集的运用

/所有样本的集合开始都是自己,故node的父亲都是自己。//每个值在自己的集合都为1,因为自己的集合只有自己一个值。//例如(1 , 10 , 13) (2 ,10 ,37) (300 ,500 ,37)可以认为是一个人。}else{//如果没有这个字段,那么就为新字段。}else{//如果没有这个字段,那么就为新字段。}else{//如果没有这个字段,那么就为新字段。//如果mapA里有这个字段,那么合并。//如果mapB里有这个字段,那么合并。//如果mapC里有这个字段,那么合并。

2024-08-07 10:51:08 653

原创 并查集问题

/所有样本的集合开始都是自己,故node的父亲都是自己。//每个值在自己的集合都为1,因为自己的集合只有自己一个值。//把bHead的父改成aHead。//新的aHead为一个集合,数值包括aSetSize和bSetSize。//1.boolean isSameSet(V x ,V y):查询样本x和样本y是否属于同一集合。//2.void union(V x , V y):把x和y各自所在集合的所在样本合并成一个集合。//在并查集中开始认为每个样本都在单独的集合里。//找一个节点的父节点。

2024-08-06 20:53:40 308

原创 银行项目利润问题(贪心思想)

/如果小根堆不为空且小根堆堆顶的花费小于目前的资金数, 小根堆弹出的项目进入大根堆。//costs[i]表示i号项目花费,profits[i]表示i号项目在扣除花费后还挣的钱。//costs[i]表示i号项目花费,profits[i]表示i号项目在扣除花费后还挣的钱。//每做完一个项目,获得的收益可以支持做下一个项目。//即目前所有可以做的项目全进大根堆来比较利润。//大根堆的堆顶的利润加到M中。//所有项目进入由花费建立的小根堆里。//根据花费建立小根堆的比较器。//建出花费的小根堆。

2024-08-06 11:09:51 426

原创 切金条问题的贪心思想(哈夫曼树)

/例如{10,20,30},就代表三个人,金条长度为60,要分为10,20,30三个部分。//如果把60先分为10和50,花费60,再把50分为20和30,花费50,一共花费110。//但如果把60分为30和30,再把30分为10和20,花费30,一共花费90。//建小根堆,每弹出两个加起来再返回进小根堆里。//一块金条切两半,花费和长度一样的铜板。//输入一个数组,返回分割的最小代价。//一群人分金条,怎么样最省铜板。

2024-08-06 10:14:36 342

原创 居民区放灯问题(贪心解法)

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

2024-08-06 09:39:51 246

原创 两种方法解决会议室宣讲时间问题(暴力方法和贪心思想)

/如果当前会议开始时间比当前时间晚,就说明时间够,那么重新弄一个不包括此会议的数组,递归来计算当前剩余会议可开的最大场次。//一些项目用一个会议室宣讲,会议室不能同时容纳两个项目宣讲,给每一个项目开始的时间和结束的时间,给出安排的日程。//// copyButExcept方法,复制Program数组,排除指定索引的元素。//目前的时间点已经安排了多少会议,又知道剩下的会议,返回剩下的最多会议数。//要求会议室进行的宣讲的场次最多,返回最多的宣讲场次。//done/是之前已经安排的会议数。

2024-08-05 00:33:59 798

原创 原地旋转正方形矩阵

i++){//有多少组次。while (a < c){//由于是正方形,所以行越界列一定越界。//m[a][b+i]上面一组。//m[a+i][d]右边一组。//m[c][d-i]下面一组。//m[c-i][b]左边一组。//然后不断组与组变换解决。

2024-08-04 20:33:49 267

原创 转圈打印矩阵

else if(b ==d){//只剩一列竖线,打印竖线。if(a == c){//只剩一条横线,打印横线。//左上方点往右下移动,右下方点往左上移动。//a行b列左上角点的位置,c行d列右下角点的位置。

2024-08-04 19:43:27 300

原创 zigzag(Z字形)打印矩阵

/告诉斜线的两端A和B还有方向,去打印。//A的列数如果到了最后一列,那么A的行号+1否则行号不变。//B的行数如果到了最后一行,那么B的列数+1,否则不变。//B的列数如果到了最后一行,那么B的行数不变,否则+1。//A的列数如果到了最后一列,那么列数不变,否则+1。int AC = 0;

2024-08-04 19:11:09 349

原创 连续正数和问题(打表技巧)

/ 这是因为二进制表示中,2的幂只有一个位为1,而它减去1后,那个1会变成0,其他位都会变成1。//num & (num - 1) 这个表达式在计算机科学中经常被用来检查一个整数是否是2的幂。//如果 num是2的幂,那么 num & (num - 1) 的结果将为0。//1.定义一种数,可以表示为若干个连续(数量大于1)正数和的形式。//给定一个参数N,返回是不是可以表示若干连续正数和的形式。//num如果是2的n次幂,返回false。//比如5=2+3,12=3+4+5。

2024-07-31 16:30:55 264

原创 牛羊吃草问题(打表技巧)

/ 如果减去当前基数后的青草数量,如果后序过程还能赢(后序过程是后手),则当前获胜。"后手" : "先手";if(winner1(n - base).equals("后手")){// 谁先把草吃完,谁获胜,若羊和牛都想赢,都会做出合理的选择。// 有一只牛和一只羊,牛先吃,羊后吃,每一轮吃草量为4的某次方。// 初始化基数为1,用于计算每轮吃的草的数量。// 当基数小于等于青草数量时,进行循环。// 给一个正整数N,表示有N份青草放在仓库里。// 基数乘以4,进入下一轮。// 其他情况下,后手获胜。

2024-07-31 16:01:27 285

原创 苹果装袋子问题(打表技巧)

/给一个正整数N的苹果数,返回至少使用多少袋子,如果无法满足小红的条件,返回-1。//问题:买苹果时,商店提供两种袋子,第一种一次装6个,第二种一次装8个。//打印1到100内的苹果所装的最大袋子数,去发现规律。//小红有强迫症,使用的袋子必须最少且每个袋子必须装满。//根据打表规律补出代码,时间复杂度O(1)//暴力思路先找规律。

2024-07-31 13:45:37 306

原创 派对最大快乐值问题(动态规划)

/1.如果某个员工来了,那么这个员工的所有下级都不来。//给一棵多叉树的头节点head,返回派对最大的快乐值。//2.派对的整体快乐值为所有到场员工的累加。//yes为头节点来到时候的最大快乐值。//no为头节点不来的时候的最大快乐值。//对每个员工都调用递归得到信息。//3.要使派对的快乐值尽可能大。//派对的最大快乐值问题。

2024-07-31 00:54:49 570

原创 返回二叉树的最大的二叉搜索子树的头节点的问题

/2.与x有关,左树得整体是搜索二叉树,右树得整体是搜索二叉树,左树的max要小于x的值,右树的min要大于x的值。// 最大子树的大小。// 如果满足条件,更新最大子树大小和isAllBST标志。//1.与x无关,找左树最大二叉搜索子树大小和右树最大二叉搜索子树大小。// 初始化当前节点的最小值和最大值为节点的值。// 如果右子树信息不为空,更新最小值和最大值。// 如果左子树信息不为空,更新最大子树大小。// 如果右子树信息不为空,更新最大子树大小。

2024-07-31 00:29:30 321

原创 给一个二叉树头节点,返回整棵树的最大距离(动态规划)

/1.与x无关,找左树最大距离、高度和右树最大距离、高度。//2.与x有关,左树的高度+右树的高度+1。//整棵树的最大距离和整棵树的高度。//整棵树的最大距离。

2024-07-30 22:40:20 275

原创 给一棵二叉树的头节点,判断是不是平衡二叉树(两种方法)

/第二种方法是通过后序遍历的方式,从底部向上计算每个节点的高度,并在计算过程中检查子树是否平衡。这种方法不需要额外的空间来存储每个节点的高度,因此在某些情况下可能更高效。同样地,最后返回的结果是一个布尔值,表示整棵树是否平衡。//第一种方法是通过递归的方式遍历整棵树,同时记录每个节点的高度差。最后返回的结果是一个布尔值,表示整棵树是否平衡。//提供两种方法来判断一棵二叉树是否平衡。//收集左树和右树的信息。//限制平衡二叉树的条件。//计算整棵树的高度。//返回整合后的信息。//信息返回的结构体。

2024-07-30 21:50:35 533

原创 纸条折痕的凹凸问题

/i为节点的层数,N为一共的层数,down == true 凹 , down == false 凸。"凹" : "凸");

2024-07-30 19:27:27 119

原创 给二叉树的某个节点,返回该节点的后继节点

int value;Node left;Node right;= null){}else{= null){

2024-07-30 19:02:38 491

原创 二叉树的序列化(前序中序后序和广度优先)和反序列化

/如果为先序,那么ans.add这句代码在前。//如果为中序,那么Node head这句代码在中间。//如果为后序,那么Node head这句代码在末尾。//如果为先序,那么Node head这句代码在前。//先序的序列化过程,中序和后序有注释解释。//如果为中序,那么在中间。//如果为后序,那么在末尾。//广度优先的序列化。

2024-07-29 20:30:18 278

原创 二叉树的广度优先搜索BFS(两种实现方法)

/如果有下一层,那么下一层最后节点是谁。//当前层的宽度为多少。//当前层最后一个节点是谁。//当前统计哪一层的宽度。//key在哪一层为value的值。//方法1使用HashMap。//方法2不用HashMap。

2024-07-29 19:49:33 567

原创 二叉树(先序中序和后序的实现)

/第一次到达一个节点就打印为先序、第二次为中序、第三次为后序。//先序、中序、后序遍历都可以在递归序的基础加工出来。//这样就保证了先出来左后出来右。//如果有右节点就压入右节点。//如果有左节点就压入左节点。//后序,两个栈实现。//后序,一个栈实现。

2024-07-29 16:47:03 306

原创 两个链表第一个相交节点问题

/两个相交链表 , 返回第一个相交节点,如果不相交返回null。//找到第一个入环的节点,如果不为环返回null。//谁长谁为cur1,谁短谁为cur2。

2024-07-28 20:27:05 452

原创 复制带有随机指针的链表(通过复制链表实现)

/ 将新节点的下一个节点指向原节点的下一个节点。// 获取当前节点复制后的下一个节点。// 获取当前节点复制后的下一个节点。// 获取当前节点的复制节点。// 获取当前节点的复制节点。// 保存当前节点的下一个节点。// 遍历链表,复制每个节点,并将新节点插入原节点后面。

2024-07-28 17:19:53 147

原创 复制带有随机指针的链表(哈希表实现)

/ 创建一个HashMap,用于存储原链表中节点与新链表中对应节点的映射关系。// 设置新节点的rand指针,指向原节点的rand节点对应的新节点。// 设置新节点的next指针,指向原节点的下一个节点对应的新节点。// 再次遍历原链表,设置新链表中每个节点的next和rand指针。// 当前遍历到的原链表节点。// 遍历原链表,将每个节点及其对应的新节点存入map中。// 返回新链表的头节点,即原链表头节点对应的新节点。// 指向下一个节点的引用。// 定义一个Node类,表示链表的节点。

2024-07-28 14:50:06 287

原创 两种方法将单向链表按某值划分成左边小、中间相等、右边大的形式

while (cur!= null){length++;length = 0;cur = head;length!length!} else {index++;//小于区域//等于区域//大于区域= null){sH = head;sT = head;}else{sT = head;eH = head;eT = head;}else{eT = head;}else{

2024-07-28 14:17:51 549

空空如也

空空如也

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

TA关注的人

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