自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录算法训练营第十七天|654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。首先,找到数组中的最大值,这个值将会是二叉树的根节点。然后,使用最大值左边的数组来递归构建左子树,使用最大值右边的数组来递归构建右子树。以上代码中,我们把二叉树转变为数组来判断,是最直观的,但其实不用转变成数组,可以在递归遍历的过程中直接判断是否有序。不能单纯的比较左节点小于中间节点,右节点大于中间节点就完事了。要知道中序遍历下,输出的二叉搜索树节点的数值是有序序列。

2024-08-16 11:47:28 332

原创 代码随想录算法训练营第十五天|二叉树遍历题目

注意:在做二叉树的题目的时候,思考步骤是先确定二叉树的遍历方式,然后就是在遍历的时候如何操作。

2024-08-15 16:34:00 836

原创 代码随想录算法训练营第十六天|二叉树中的回溯思想

在本题中,我们要显示的回溯,因为传入的path使引用类型,这是会拷贝地址的。每一次的递归都会对path进行修改,且会传到下一层,所以在返回之前,需要对path.pop。sum为什么不需要显示的回溯,因为sum是int,每一层之间的sum不会相互影响,也就是下一层的sum的修改,对这一层sum的值不会有影响。的路径,这条路径上所有节点值相加等于目标和。,返回所有从根节点到叶子节点的路径。路径总和等于给定目标和的路径。和一个表示目标和的整数。给你一个二叉树的根节点。

2024-08-15 15:43:18 244

原创 代码随想录算法训练营第十四天|二叉树的深度和高度

所以本题中我们可以通过后序求的根节点高度来求的二叉树最大深度,也可以采用前序遍历求二叉树的最大深度。一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。对于情况二,分别递归左孩子,和右孩子,递归到某一深度一定会有左孩子或者右孩子为满二叉树,然后依然可以按照情况1来计算。完全二叉树只有两种情况,情况一:就是满二叉树,情况二:最后一层叶子节点没有满。对于情况一,可以直接用 2^树深度 - 1 来计算,注意这里根节点深度为1。可以使用深度遍历,也可以使用广度遍历。

2024-08-15 15:08:09 899

原创 代码随想录算法训练营第十三天|二叉树基础知识+多种遍历

我们以中序遍历为例,

2024-08-12 15:59:13 917

原创 代码随想录算法训练营第十一天|150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素

每次窗口移动的时候,调用que.pop(滑动窗口中移除元素的数值),que.push(滑动窗口添加元素的数值),然后que.front()就返回我们要的最大值。是一个最大堆,默认情况下,它会根据元素的“大于”运算符来排序元素(即,顶部元素是队列中最大的元素)。,因为优先级队列对外接口只是从队头取元素,从队尾添加元素,再无其他取元素的方式,看起来就是一个队列。我们维护的是一个大小为k的堆,每次添加元素的时候(超出k个),都会将堆顶元素弹出。大顶堆每次将最大的元素弹出,最后大顶堆里积累的是k个最小元素。

2024-08-10 15:14:25 765

原创 代码随想录第十天|栈和队列篇

从下图中可以看出,栈的内部结构,栈的底层实现可以是vector,deque,list 都是可以的, 主要就是数组和链表的底层实现。deque是一个双向队列,只要封住一段,只开通另一端就可以实现栈的逻辑了。使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈。,再从出栈弹出数据,如果输出栈不为空,则直接从出栈弹出数据就可以了。当然可以拿字符串直接作为栈,这样省去了栈还要转为字符串的操作。在push数据的时候,只要数据放进输入栈就好,刚刚讲过栈的特性,对应的队列的情况是一样的。

2024-08-09 17:50:42 634

原创 代码随想录算法训练营第九天|151.翻转字符串里的单词、55. 右旋字符串、28. 实现 strStr()、459.重复的子字符串

就可以做到O(n)的时间复杂度。快指针寻找单词,慢指针指向更新的位置。

2024-08-09 17:29:42 723

原创 代码随想录算法训练营第八天|344.反转字符串、541. 反转字符串II、替换数字

344.反转字符串编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。库函数中提供了反转的功能,通过本题了解库函数的内部实现原理。

2024-08-07 15:27:31 328

原创 代码随想录算法训练营第六天|哈希表

也称为散列表,是根据关键码值(Key value)而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个,存放记录的数组称为哈希表。

2024-08-05 16:01:31 1004

原创 代码随想录算法训练营第四天|24. 两两交换链表中的节点 、 19.删除链表的倒数第N个节点 、面试题 02.07. 链表相交 、142.环形链表II

我们可以知道,快指针和慢指针的速度不同,走的路程也不相同,但是两者的时间相同。同时,快指针的速度 = 慢指针速度 * 2 ,路程 = 速度 * 时间。双指针的经典应用,如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾。从头结点出发一个指针,从相遇节点 也出发一个指针,这两个指针每次只走一个节点, 那么当这两个指针相遇的时候就是 环形入口的节点。如果存在环,慢指针可以视作不动(相对静止),快指针以一个节点的移动速度靠近慢指针,两个指针一定会相遇。

2024-08-03 21:59:01 701

原创 代码随想录算法训练营第三天|203.移除链表元素 、707.设计链表 、 206.反转链表

还是不能够确定结束条件的话,

2024-08-02 17:50:23 811

原创 数组篇章总结|二分查找、双指针、前缀和

二分查找法。

2024-08-01 22:11:44 934

原创 代码随想录算法训练营第二天| 209.长度最小的子数组 、59.螺旋矩阵II、区间和、开发商购买土地

主要学习了滑动窗口和前缀和。滑动窗口是双指针法的一种。关键点是清楚窗口是什么,如何移动窗口的起始位置和终止位置。前缀和,通过预先计算数组中每个位置前所有元素的累加和,将这些部分和存储在一个新的数组中,从而在需要计算某个区间的和时,可以通过简单的减法操作得到结果,而不必重新遍历整个区间。前缀和 在涉及计算区间和的问题时非常有用!

2024-08-01 15:24:30 721

原创 代码随想录算法训练营第一天|704.二分查找,27.移除元素,977.有序数组的平方

在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是循环不变量规则。写二分法,区间的定义一般为两种,左闭右闭即[left, right],或者左闭右开即[left, right)。我采取的是左闭右闭的写法,也是最常见的写法。二分查找法,关键点确定查找区间,遵循循环不变量。快慢指针法,确定快慢指针的含义。快指针遍历数组,查找目标元素;慢指针指向result的结尾,result的更新下标。

2024-07-31 16:01:35 555

原创 代码随想录|栈和队列

通过本题,引出另一种队列就是。

2023-10-15 22:21:18 74

原创 代码随想录|KMP算法小总结

next[8]=4,下标1-3 等于下标5-7,同时因为下标1-7 同下标9-15相同,所以有四部分相同。因为我们已知next[16],假设next[16]=8 ,即下标1-7 同下标9-15相同。写过KMP的同学,一定都写过next数组,那么这个next数组究竟是个啥呢?下标1-3 等于 下标5-7 等于 下标9-11 等于 下标13-15。我们当前要计算next[17],那就是看下标1-下标16的公共前后缀。定义两个指针 i 和 j,j指向前缀末尾位置,i指向后缀末尾位置。2.处理前后缀不相同的情况。

2023-10-12 20:54:34 131

原创 代码随想录算法学习|哈希表经典题目

不要判断 nums[i]>target 就返回了,三数之和,可以通过nums[i]>0就返回,因为0是一个确定的数字。四数之和的双指针解法是两层for循环nums[k]+nums[i]为确定值,然后循环内有left和right下标作为双指针,找到nums[k]+nums[i]+nums[L]+nums[R]==target的情况。两层for循环就可以确定a和b的数值了,然后使用哈希法确定 0-(a+b)是否在数组里出现过,其实这个思路是正确的,但是有个很棘手的问题,就是题目要求不可以包含重复的三元组。

2023-10-09 19:58:47 82 1

原创 代码随想录算法学习 | 哈希表理论基础

当我们遇到了要快速判断一个元素是否出现在集合里的时候,就要考虑哈希法若数据的范围已知或者有限,可以考虑使用数组若数据范围较大,可使用set集合,首选unordered_set;如果需要集合有序,那么用set;如果要求不仅有序还要有重复数据的话,用multiset若有两个数据需要存储,使用map但哈希表也是牺牲空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速查找。

2023-10-08 19:43:13 70

空空如也

空空如也

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

TA关注的人

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