自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录算法训练营day24,回溯算法,复原ip地址,子集。

与字符串切割类似。待更新。

2024-07-27 00:10:31 169

原创 代码随想录算法训练营day23,回溯算法,组合求和,分割字符串。

关键在于startIndex的使用,要实现多次取同一个元素。关键是去重操作。[startIndx, i]为待判断的子串。

2024-07-26 01:14:07 184

原创 代码随想录算法训练营day22,回溯算法,数字组合问题,电话号码的字符组合。

k即为递归深度,每层递归传入的集合即为递归的宽度,递归终止时处理结果,递归返回也就是回溯时撤销上一步的结果。与上一题如出一辙,只是在收集结果的时候判断一下是否符合要求。注意本题中index的作用,用于指向当前参与递归的数字。除此之外与上面的题类似。

2024-07-25 00:02:03 225

原创 代码随想录算法训练营day21,二叉树,修剪二叉搜索树,构建平衡二叉搜索树,逆中序遍历二叉树。

当递归到的节点的值没有落在[low, high]这个区间里面时,不能简单的就返回null,因为其左孩子或者右孩子可能满足要求,所以还要继续递归。为数组中间元素构造一个节点,节点左指针接住递归左区间的返回值,右指针接住递归右区间的返回值,最后将该节点返回给上一层递归函数。其实构造出来的就是折半查找判断树。采用逆中序遍历二叉树,用pre保存root的前驱节点的值,然后让root的值与pre作累加即可。

2024-07-23 23:44:03 193

原创 代码随想录算法训练营day20,二叉树,二叉搜索树的插入和删除操作,在二叉树中寻找最近公共祖先节点。

利用二叉搜索树的性质来去找目标节点,根据当前节点的值落在p的值和q的值划分区间的左边还是右边来选择下一层递归传入的时当前节点的左子树还是右子树,如果刚好落在区间内表面当前节点即为目标节点按照在二叉搜索树中搜索的方式,找到二叉树最底层某个叶子节点,将val插入到这个叶子节点中。按二叉搜索树的特点找到待删除的节点后,按照规则删除即可。

2024-07-22 00:21:25 141

原创 代码随想录算法训练营day18,二叉树,求二叉搜索树最小绝对差和众数,求二叉树最近公共祖先。中序遍历中的双指针,后序遍历从下往上回溯。

二叉树中的双指针,中序遍历时,cur用于中序遍历,pre指向中序序列中cur的前驱,最小绝对差一定是中序序列中相邻元素的差值。本题除了双指针中序遍历二叉树外,要关注count和maxCount的作用,count记录中序遍历到当前时相等元素的个数,而要让maxCount为整颗树中最大的相等元素个数。采用后序遍历,从下往上回溯,查找当前节点的左子树是否含有p或q,查找根节点的右子树是否含有p或q,如果左右子树都能查到目标节点,则当前节点即为最近公共节点。

2024-07-21 00:02:14 184

原创 代码随想录算法训练营day17,二叉树,构建最大二叉树,合并二叉树,二叉搜索树的搜索和验证。

与从中序数组后序数组建立二叉树相比算简单一点了,先找到nums中最大元素的下标,划分出左右两个区间,然后new一个根结点填入最大元素的值,递归调用构造函数,用左区间构建根节点的左子树,用右区间构造根节点的右子树。待更新待更新待更新。

2024-07-20 01:13:49 212

原创 代码随想录算法训练营day17,二叉树,构建最大二叉树,留空三题候补。

这道跟从中序数组后序数组建立二叉树相比要简单一点,找到当前数组中最大元素的下标,将数组划分成两个区间,左边为构建左子树的数组,右边为构建右子树的数组。待更新待更新待更新。

2024-07-20 01:05:14 182

原创 代码随想录算法训练营day16,二叉树,求最左下角值,求路径总和。

本题如果采用基于层序遍历的迭代法将会很简单。而采用递归法的话会稍微复杂一点,定义全局变量result记录当前最左下角值、定义max_depth记录当前最大深度,我们要寻找的是整颗树中最大深度最左边的结点,因此每个遍历到的叶子结点都是可疑的最左下角结点,如果它的深度比当前记录的深度大,就先认为它是最左下的结点,采用优先遍历左子树的遍历方式可以保证每一层中被记录的一定是最左边的结点。

2024-07-19 00:00:13 159

原创 代码随想录算法训练营day15,二叉树,统计完全二叉树结点个数,判断是否是平衡二叉树,求二叉树的所有路径,判断二叉树左叶子。

与传统统计普通二叉树的节点数量的递归算法不同在于,利用完全二叉树结点数量计算公式来减少递归次数,关键在于如何判断子树是否为完全二叉树。根节点接受到左右子树返回的高度后计算左右子树高度差来判断自己是否是平衡二叉树,若平衡则将自己的高度返回给上一层调用自己的过程,若不平衡则返回-1表示当前子树已经不满足平衡二叉树的要求则整棵树都不满足平衡二叉树要求。回溯思想首次出现,递归返回后要将更深层次递归的结果清空掉。无法判断当前结点是否是左结点,必须通过父节点和它左孩子结点的关系才能判断父节点的左孩子节点是否是左节点。

2024-07-17 22:51:10 113

原创 代码随想录算法训练营day14,二叉树,翻转,判断对称,求最大最小深度。

采用一种遍历方式,对遍历到的结点交换左右指针。递归时,同时传递根节点的左孩子和根节点的右孩子。

2024-07-16 22:42:01 202

原创 代码随想录算法训练营day13,二叉树,二叉树的遍历。

【代码】代码随想录算法训练营day13,二叉树,二叉树的遍历。

2024-07-15 20:13:59 264

原创 代码随想录算法训练营day11,栈的应用:后缀表达式求值。

遇到操作数就压栈,遇到操作符,就取出两个操作数进行操作符指定的运算,运算结果压入栈中,最后栈中就会剩下结果。

2024-07-13 18:54:58 222

原创 代码随想录算法训练营day10,栈、队列,栈和队列的相互实现,栈的应用:元素匹配。

用两个栈来模拟队列,这题可以用来熟悉队列、栈的特性和基本操作。用两个队列来模拟栈,这题可以用来熟悉队列、栈的特性和基本操作。栈的应用:括号匹配,挺简单的,没啥好说的。

2024-07-12 20:14:21 312

原创 代码随想录算法训练营day9,字符串,去除特定字符元素,字符串逆转的应用

综合考察字符串逆转,去除特定元素。字符串逆置即可,又是一道408统考直接抄袭的题目。待更新待更新待更新。

2024-07-11 19:45:47 306

原创 代码随想录算法训练营day8,字符串,字符串翻转,字符串填充。

一头一尾双指针,元素交换即可。当i + k

2024-07-10 19:12:32 366

原创 代码随想录算法训练营day7,哈希表,双指针求n数之和。

应用映射,遍历数组nums1和nums2将所有的相加结果存进映射中。然后遍历数组nums3和nums4,每次遍历尝试从映射中查找结果等于当前遍历的nums3和nums4元素和的相反数。用数组word_counts统计magazine中每个字符出现的次数。然后遍历ransomNote,对取到的每一个字符,映射到数组对应位置,让记录的该字符次数减1,若减1后小于0,则表示该字符缺少,返回false。

2024-07-09 20:26:53 493

原创 代码随想录算法训练营day6,哈希表,快速判断一个元素是否出现过。

将数组result当作哈希表使用,字母的ASCII码与字母本身构成映射关系。先遍历字符串s,对每一个字母映射到result的某个下标i后将result[i]加一,含义是ASCII码为i+ASCII('a')的字母在s中出现了result[i]次。再遍历t,这是这时将result中元素值相减。最后,遍历一遍result,若所有元素都为0则满足有效的字母异位词要求。只需遍历其中任意一个数组,判断数组元素是否再另一个数组中出现,若在另一个数组中出现过则为交集中的元素。

2024-07-08 19:15:46 508 1

原创 代码随想录算法训练营day4,链表,如何求含环形链表的入环第一个结点?

依旧引入虚拟头结点保证操作统一,另外注意改变链表结点指向时,提前保存下一次循环需要的结点指针。双指针法,fast先走n步后slow指针出发,然后fast指空时,slow指向需要被删除的结点。将两个链表各遍历一次,获得两个链表的长度,然后让first指向更长的链表头结点,让其先开始移动,将长度差消除,此时first指针跟second指针对齐以后,开始循环判断是否指向头一个结点,如果指向同一个结点,则为交点结点。算法背后的数学原理还没有搞清楚,先背下来这种算法吧。后面再花时间理解一下数学原理。

2024-07-06 20:14:40 633

原创 代码随想录算法训练营day3,链表,虚拟头结点,双指针翻转链表,实现链表增删查操作

引入虚拟头结点可以使链表对第一个结点的操作和对其他结点的操作统一。引入虚拟头结点后,实现对链表插入、删除、查找等操作。双指针法翻转单链表,注意迭代过程中,使当前结点指向其前驱结点时不要忘记提前保存当前结点的后继。

2024-07-05 21:46:12 421

原创 代码随想录算法训练营day2

双指针法,用两个指针分别指向原数组头尾,头尾指针指向的元素平方后比较大小,更大的元素会被加到新数组中。始终搜寻更大的元素,指针移动的逻辑是:当前指向元素更大的指针在此元素被加入到新数组后,朝着另一个指针移动一步,两个指针往中间移动,两个指针相遇错开以后,原数组遍历结束。209.长度最小的子数组题解for (;fast++) {本题依旧是双指针法。

2024-07-04 15:08:32 538

原创 代码随想录算法训练营day1

上面给出的是二分查找左闭右闭的写法。写边界处理条件和left、right变了更新逻辑的时候,遵循区间定义不变量原则即可。双指针法,用双指针解题时候一定要明确指针所指示的对象,比如说27.移除元素这一题,fast用来遍历数组,去搜寻不等于val的元素,slow指向目标数组尾部待插入新元素的位置。然后就是要搞清楚指针移动的逻辑,fast要遍历数组查看原数组每一个元素是否等于val,如果不等于val就会被放到slow指向的位置,故fast每一次循环走一步。

2024-07-03 13:58:43 521

空空如也

空空如也

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

TA关注的人

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