- 博客(17)
- 收藏
- 关注
原创 算法村,二分查找拓展问题
二分查找是一种高效的查找算法,可以用于在有序数组中查找目标元素,也可以用于在旋转数组中查找最小值或峰顶。通过不断缩小搜索范围,每次将搜索范围缩小一半,可以快速地找到目标元素或最小值/峰顶。需要注意边界条件的处理,以及判断条件的选择。
2023-08-24 19:15:14 467 1
原创 算法村,彻底搞懂二分查找!
二分查找重复元素的实现思路是先使用二分查找找到目标元素的一个索引,然后向左和向右遍历数组,找到所有与目标元素相等的元素的索引。我这里考虑到了出现重复元素的情况,当找到当前值之后继续往左边找有没有重复的元素,当有重复元素时就mid就一直减,返回mid+1,是考虑到最后一个重复的元素也会使mid--,要找到原来的就必需加1。
2023-08-22 20:20:46 486 1
原创 算法村,二叉树深度和高度问题
二叉树的最大深度只要判断二叉树为空和不为空俩种情况,二叉树为空最大深度为0,二叉树不为空,最大深度等于左子树的最大深度和右子树的最大深度取最大值加1平衡树是指左右子树的高度差不超过1的二叉树,.当二叉树为空,则是平衡二叉树。2.判断左右子树的高度是否超过1,超过则不是平衡二叉树,3.继续递归判断左右子树是否是平衡树。二叉树的最小深度当二叉树为空,最小深度为0如果二叉树的左子树为空,但右子树不为空,则最小深度为右子树的最小深度加1。
2023-08-20 14:10:26 522 1
原创 算法村-二叉树的路径和双指针问题
这些题目使用递归遍历都要简单不少,双指针主要是俩个指针相比较,然后递归遍历,就能得到结果,路径主要是要找到叶子节点,叶子节点是左右同时为空就是叶子节点,不为空就一直递归遍历。
2023-08-19 20:56:49 521
原创 算法村-二叉树的递归和迭代遍历
1 / \ 2 6 \ \ 3 7 / \ / 4 5 8 迭代前序遍历emplace_back()函数用于在vector的尾部插入一个新元素。emplace()函数用于在stack的顶部插入一个新元素。第一轮 [1,2][1,2]第二轮[1,2,3,4][1,3,4]第三轮[1,2,3,4][1,3]第四轮[1,2,
2023-08-11 20:40:06 51 1
原创 算法村,树的基础问题
二叉树的层序遍历比较简单,定义一个二层的向量来保存结果,再定义一个栈来进行层次遍历,然后就能拿到结果,从底向上层序遍历就多了个向量保存数据,然后进行反转就完成了,找最大值就先定义一个变量,然后层次遍历找最大值,平均数也跟最大值差不多。
2023-08-09 20:40:54 625 1
原创 算法村,通过中序和后序恢复二叉树
中序:[10 9 11 15 13 14 12] 后序:[10 15 14 13 12 11 9]中序:[10 11 15 13 14 12] 9后序:[10 15 14 13 12 11] 9。中序:10[ 11 15 13 14 12] 后序:10[ 15 14 13 12 11]后序: [8 7 6 5 4 3 ] 2 中序:[3 4 8 6 7 5 ] 2。后序:4[8 7 6 5]中序:4[8 6 7 5 ]后序:5[8 7 6]中序:[8 6 7]5。
2023-08-02 19:47:56 891
原创 算法村,队列和栈
队列实现栈的总结:队列实现栈的基本思想是,使用两个队列,一个用于存储数据元素(主队列),另一个用于辅助操作(辅助队列)。在入栈操作时,直接将元素插入主队列中。在出栈操作时,将主队列的元素按照先进先出的顺序移动到辅助队列,直到剩下最后一个元素,然后弹出这个元素。栈实现队列的总结:栈实现队列的基本思想是,使用两个栈,一个用于存储数据元素(主栈),另一个用于辅助操作(辅助栈)。在入队操作时,直接将元素插入主栈中。在出队操作时,将主栈中的元素全部弹出并压入辅助栈,然后弹出辅助栈的栈顶元素即可。
2023-07-29 10:48:21 957 1
原创 算法村,队列的基本操作
队列的特点是节点的排队次序和出队次序按入队时间先后确定,即先入队者先出队,后入队者后出队,队列实现方式也有两种形式,基于数组和基于链表。对于基于链表,因为链表的长度是随时都可以变的,实现起来比较简单。
2023-07-27 20:31:04 976 1
原创 通关村,双指针的妙用!
数组很多问题都可以用双指针解决,我这几个题使用的是快慢指针和对撞指针。快慢指针快指针:快指针通常用于遍历数组,快速移动到下一个位置。慢指针:慢指针通常用于记录某个位置或者某个状态。对撞指针1.查找:当数组有序时,可以使用对撞指针来进行查找操作。通过比较左右指针指向的元素与目标值的大小关系,可以逐步缩小查找范围,直到找到目标元素或者确定目标元素不存在。2.去重:对撞指针也常用于去除数组中的重复元素。当数组有序时,可以使用对撞指针来去重操作。
2023-07-24 11:33:19 1206
原创 算法村不简单的数组增删
因为我这个值插入,所以要判断当前元素个数或者比最后一个元素大的情况,我for循环是从大的开始找,key值小于就往后移动,当找到比key值小的下标值,这里i+1是为了在前面插入,然后结束循环,我们后移也完成了,赋值完成返回插入下标。我这里使用的for循环是先找到key值的下标,然后才开始前移动,这里设置的index,是记录是否找到删除数据,找到后就开始向前移动,然后返回size-index,这个没找到就返回原来大小,找到就减一;判断数组是否已满,判断数组实际元素为0或者插入值比数组最后一个元素大,数据后移。
2023-07-23 23:53:56 1260
原创 通关村第二关区间反转
穿针引线法,我自己觉得更容易理解。先创建虚拟节点,虚拟节点的下一个节点指向头节点,然后循环获取left前一个节点和left节点,再循环获取right节点和right后一个节点,然后把left前一个节点和right节点制空,切断链表,开始区间反转,反转后把切断的链表重新链接上。头插法我不太理解那个循环,知道是怎么实现反转的。pre指向区间前一个节点,cur用于遍历区间内的节点,指针next来存储当前节点的下一个节点,我们找到区间的起始节点和结束节点,并记录起始节点的前一个节点(pre。
2023-07-21 11:39:01 1357 1
原创 算法通关村第二关,终于学会反转链表!
反转链表主要是用三个指针,一个指针指向空,一个指向head第一个节点,一个在循环做的临时变量,在循环设置这个指针不用考虑head为空的情况,然后在循环改变指向后,向前移动一步,然后继续循环改变指向。
2023-07-20 19:05:03 1500
原创 通关村 白银挑战 找到链表第一个公共子节点的五种方法
开始写这题,我以为是找俩个链表相同的值,后来才知道是找相交的地址和值,果然理解题目很重要。暴力解比较简单,对比所有的节点就行了,也是最容易理解的。哈希表法,就是把一个链表的节点存入set容器,然后循环判断,使用set容器的count函数判断是否相交差和双指针,就是找出长的链表,然后统一链表的步长,然后一个一个的比较,找到相交的节点双指针的解法,可以去看leetcode的图解,看指针是怎么走的。
2023-07-19 15:05:28 1601
原创 通关村 单向链表
int val;初始化链表//创建头节点//创建尾指针i < 5;i++)//创建新的节点else {遍历链表return;获取链表长度return 0;插入链表// 判断链表是否为空// 为空直接返回插入链表// 获取链表长度// 判断插入的链表的位置是否越界。
2023-07-18 09:30:36 1693 3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人