自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法——(6.2)二叉树的递归

那么疑问来了,为什么上一题为什么不用回溯,我在上一题特地强调了,他的路径是作为参数传入进去,最简单的理解就是每个递归函数的每个路径参数都是一个list,而这一题list是一个全局变量,所有的递归公用一个。需要注意的是,尽管对象类型按引用传递,但实际上传递的是引用的副本,而不是引用本身。4.由次可见,当递归左右孩子的时候他们的返回值并没用,这主要是每次返回的是递归的这个节点,这个并没有用处,后面会遇到需要改变左右孩子节点,或者建立关系时候就需要返回值了。变量存储的是对象的引用,而不是对象本身。

2023-10-10 22:05:35 133 1

原创 算法——(6.1)二叉树遍历

比如将前序遍历为例,首先把第一个结点压入栈中,这时候可以知道该栈的左右结点都没有处理,所以要把该结点出栈,然后按照右孩子、左孩子、中结点的顺序压入栈中,因为出栈的时候是相反的,然后在中结点后面在压入一个空结点,这意味着该结点的左右孩子都处理完了,下次出栈遇到null说明该结点的前面的结点都已经处理完毕,那么就可以输出该结点。1.思路分析:通过一个队列,首先将根结点入队,然后判断队列是否为空,不为空则出队,并对该结点进行处理,首先将该结点的左右结点入队,再将该结点输出。

2023-10-06 15:21:39 17 1

原创 42.接雨水

height[left - 1] < height[right + 1]的时候计算左列的雨水量,当小于的时候我们可以理解遍历左侧的列找到一个比右边尾部列要大的数,如果没找到说明左边的最大值肯定要小于尾部的数,接的雨水肯定是由最小的决定,所以可以直接计算出结果。2.什么时候出栈:出栈就是需要计算该列接的部分雨水,该列可以接雨水的条件就是产生凹槽,产生凹槽就是当遍历到一列入栈时大于栈口的数据,说明右边有一个比该列高的数据,那么本身是单调栈,那么左边也存在一个高的数据,那么就产生了凹槽。

2023-09-22 13:18:14 12

原创 算法—(5)栈与队列

找的时候前k大的数据的话,那么堆最好是用小顶堆,每次只需要维护k个元素的堆,每次将最小的元素出堆,这样遍历完数据就只剩下最大的10个数据了。2.方法采用:由上述图可知,每次滑动窗口的移动都会造成一个数据的移除和一个数据的加入,我们需要处理的数据其实就是对移除数据和加入数据的处理,一般这种情况采用队和栈进行管理较好,因为队和栈的出入与这个操作很相似。3.移除队列的问题:首先得判断滑动窗口中需要移除的元素是否与队列中的最大元素相同,如果相同的话肯定得将这个元素出队,否则就不需要处理出队。

2023-09-21 23:07:44 17

原创 算法—(4)字符串

去除,第一个参数是需要修改字符串的开头,第二个是要截取的结尾,最后一个参数是要替换的字符。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。(2)解题思路:可以理解为将字符串切割成小字符串然后使用一反转字符串,i每次截取2k个字符,再不同情况确定需要反转的区域。(1)通过双指针,left指向头,right指向尾,相互交换即可。个,则将剩余字符全部反转。}//避免连续空格,只要保证最右边的不能是空格。(3)整个过程中java字符串中的字符修改是一个难点。是由非空格字符组成的字符串。

2023-09-15 00:01:28 15

原创 算法—(3)哈希表

2.思路分析:求2个数组的交集而且不能有重复的数据,这个只需要记录交集的数据就行了,通过查找数据得出交集的数据即可,也就是说只需要一个数据,这时候我们想到的就是set集合,又因为不用考虑顺序和不能重复,采用unordered_set。2.思路分析:可以很清晰的知道出现的字符是固定的26个英文字母,这样他们的关键值就已经确定,可以通过一个数组来记录其出现过的次数,只要另一个字符串将这些清零就符合要求。因此这里最好采用双指针法。首先排序,再通过一个循环来定死一个数,再通过2个指针来指向另外2个数,进行判断。

2023-09-11 22:04:56 16

原创 算法—(2)链表

2.寻找环的入口,慢指针走了D+S1(为什么慢指针只走一圈),快指针走了2(D+S1)或者说是D+S1+n(S1+S2),相等可得D=(n-1)(S1+S2)+S2。这样做的意义是因为有些链表操作需要该节点的前节点,而当处理的是头节点时,没有前节点,这就造成了处理头节点与其他节点不同,这样则需要增加判断条件进行不一样的处理,过于麻烦,增加一个头节点可处理这个问题。(2)主要思路:1.通过快慢指针,fast快指针每次向后走2格,slow慢指针向后走1格,如果中间快指针与慢指针相遇了,说明有环。

2023-09-07 22:05:05 8

原创 算法—(1)数组

1.二分法。

2023-08-22 01:11:22 18 1

空空如也

空空如也

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

TA关注的人

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