自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

中序遍历,一直更新maxVal,一旦发现maxVal >= root->val,就返回false,注意元素相同时候也要返回false。构造树一般采用的是前序遍历,因为先构造中间节点,然后递归构造左子树和右子树。若新节点值大于栈顶,则弹出栈顶元素作为其左子,直到栈顶不小于新节点。要知道中序遍历下,输出的二叉搜索树节点的数值是有序序列。:栈中保存当前右链的节点,确保栈顶到栈底的值递减。:每次弹出较小的节点形成新节点的左子树链。将新节点设为栈顶的右子,随后入栈。

2025-04-21 21:41:16 208

原创 代码随想录算法训练营第16天 | 513.找树左下角的值、112. 路径总和、113. 路径总和ii、106.从中序与后序遍历序列构造二叉树、105.从前序与中序遍历序列构造二叉树

在递归返回之前,把我们在递归开头加入的节点,也就是当前 path 的最后一个节点,从 path 中去掉(恢复现场)。如果不及时去掉,会导致最终加到答案中的 path,既包含左子树的节点,又包含右子树的节点,这连「路径」都算不上。以后序数组的最后一个元素为切割点,先切中序数组,根据中序数组,反过来再切后序数组。不要去累加然后判断是否等于目标和,那么代码比较麻烦,可以用递减,让计数器count初始为目标和,然后每次减去遍历路径节点上的数值。如果最后count == 0,同时到了叶子节点的话,说明找到了目标和。

2025-04-16 17:47:19 694

原创 代码随想录算法训练营第15天 |110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数

的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。如果该节点的左节点不为空,该节点的左节点的左节点为空,该节点的左节点的右节点为空,则找到了一个左叶子。在这道题目中将涉及到回溯,因为要把路径记录下来,需要回溯来回退一个路径再进入另一个路径。一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。是当 cur不为空,其左右孩子都为空的时候,就找到叶子节点。层(从第 0 层开始),则该层包含。

2025-04-14 10:49:06 390

原创 代码随想录算法训练营第14天 | 226.翻转二叉树 、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度

如果左子树为空,右子树不为空,最小深度是 1 + 右子树的深度。右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。最后如果左右子树都不为空,返回左右子树深度最小值 + 1。本题遍历只能是“后序遍历”,因为我们要通过递归函数的返回值来判断两个子树的内侧节点和外侧节点是否相等。,所以本题中通过后序求的根节点高度来求的二叉树最大深度。,使用前序求的就是深度,使用后序求的是高度。这里要注意叶子节点是指没有子节点的节点。

2025-04-13 21:33:16 377

原创 代码随想录算法训练营第13天 | 递归遍历 、迭代遍历、统一迭代、层序遍历

写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。:中序遍历是左中右,先访问的是二叉树顶部的节点,然后一层一层向下访问,直到到达树左面的最底部,再开始处理节点(也就是在把节点的数值放进result数组中),这就造成了。深度为k,有2^k-1个节点的二叉树。:调整一下先序遍历的代码顺序,就变成中右左的遍历顺序,然后在反转result数组,输出的结果顺序就是左右中了。

2025-04-10 22:36:32 560

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

给定逆波兰表达式总是有效的。去掉括号后表达式无歧义,上式即便写成 1 2 + 3 4 + * 也可以依据次序计算出正确结果。平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 )。该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * )。解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9。输入: ["2", "1", "+", "3", " * "]Notation,RPN,或逆波兰记法),也叫后缀表达式(将。

2025-04-09 10:58:54 281

原创 代码随想录算法训练营第10天 | 232.用栈实现队列 、225. 用队列实现栈、20. 有效的括号、1047. 删除字符串中的所有相邻重复项

第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false。第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false。那么什么时候说明左括号和右括号全都匹配了呢,就是字符串遍历完之后,栈是空的,就说明全都匹配了。栈提供push 和 pop 等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterator)。队列是先进先出,栈是先进后出。

2025-04-07 16:26:37 244

原创 代码随想录算法训练营第9天 | 151.翻转字符串里的单词 、卡码网:55.右旋转字符串、28. 找出字符串中第一个匹配项的下标、459.重复的子字符串

解题思路:移除多余空格、将整个字符串反转、将每个单词反转。151.翻转字符串里的单词。

2025-04-04 18:45:35 177

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

通过 [::-1] 可以反转序列:语法:s[start:end:step],区间为。,其中 step=-1 表示反向步进。

2025-04-03 23:18:20 274

原创 代码随想录算法训练营第7天 | 454.四数相加II 、383. 赎金信、15. 三数之和、18. 四数之和

四数之和的双指针解法是两层for循环nums[k] + nums[i]为确定值,依然是循环内有left和right下标作为双指针,找出nums[k] + nums[i] + nums[left] + nums[right] == target的情况,三数之和的时间复杂度是O(n^2),四数之和的时间复杂度是O(n^3)。涉及去重操作用哈希法不是很合适,可用双指针法。生成器表达式避免显式嵌套循环,提升可读性。替代手动初始化字典,代码更简洁。),将问题转化为两数之和问题。将四个数组分为两组(

2025-04-03 22:17:40 195

原创 代码随想录算法训练营第6天 | 242.有效的字母异位词 、349. 两个数组的交集、202. 快乐数、1. 两数之和

当需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法。中,要选择适当的哈希表的大小,这样既不会因为数组空值而浪费大量内存,也不会因为链表太长而在查找上浪费太多时间。将要查找的内容直接映射为哈希表上的索引,哈希函数通过hashcode将内容转换为数值,通过特定编码方式。:要保证tableSize大于dataSize,需要依靠哈希表中的空位来解决碰撞问题。数组就是一张哈希表,关键码是数组的索引下标,通过下标可直接访问数组中的元素。:发生冲突的元素被储存在。

2025-04-03 11:43:42 166

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

使用虚拟头节点和双指针。

2025-04-02 22:43:03 163

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

链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。:数组在定义的时候,长度就是固定的,如果想改动数组的长度,就需要重新定义一个新的数组。链表的长度可以是不固定的,并且可以动态增删, 适合数据量不固定,频繁增删,较少查询的场景。:链表在内存中不是连续分布的,而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理。:每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。

2025-04-01 21:45:59 437

原创 代码随想录算法训练营第2天 | 209.长度最小的子数组 、59.螺旋矩阵II

滑动窗口法:双指针,一个指针指向起始位置,一个指针指向终止位置,且内层循环最好用while不用if。重点在于要统一循环判断的边界条件,这里使用左闭右开。209.长度最小的子数组。

2025-03-31 23:01:05 240

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

首先回顾一下数组理论基础,数组是存放在连续内存空间上的相同类型数据的集合,数组可以方便地通过下标索引的方式获取到下标对应的数据。暴力解法:两层for循环,一个for循环遍历数组元素 ,第二个for循环更新数组。双指针法:把nums中的不等于val的数,依次填在0,1,2,…核心点在于要定义清楚边界值能不能取到,再继续二分。第一种写法:左闭右闭 [left,right]第二种写法:左闭右开 [left,right)双指针法:从两边开始合并。

2025-03-30 21:57:14 183

空空如也

空空如也

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

TA关注的人

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