自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode hot 100-二叉树

应该把根节点之前的右子树放到根节点左子树的最右节点的右指针上,然后把根节点的左指针指为空,此时根节点只有右子树,左子树为空,然后接着同样的方式处理根节点的下一个节点(即根节点的右节点)二叉树节点的高度:指从节点到叶子节点( 叶子节点是指没有子节点的节点)的最长简单路径边的条数或者节点数(取决于高度从0开始还是从1开始),(叶子节点的高度返回给其父节点,父节点在叶子节点的高度上加一就是父节点的高度,所以先处理子节点,最后处理父节点,就是左右中的顺序,即后序遍历)[3:5]: 切片符号表示要包含的索引范围。

2024-03-08 11:24:45 824 1

原创 (十七)|530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先

涉及二叉搜索树(所有左子树结点的值都小于根节点的值,所有右子树结点的值都大于根节点的值),一定中序遍历,因为只有中序遍历的时候,元素才是有序的!530.二叉搜索树的最小绝对差给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。

2024-03-02 21:00:17 707

原创 (十六)| 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

617.合并二叉树给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。递归三部曲:1.

2024-01-24 19:55:37 801 1

原创 (十五)|513.找树左下角的值 112. 路径总和 113.路径总和ii 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树

那么如何找最左边的呢?可以使用前序遍历(当然中序,后序都可以,因为没有 中间节点的处理逻辑,只要左优先就行,,而这三种遍历顺序都是左优先),保证优先左边搜索,然后记录深度最大的叶子节点,此时就是树的最后一行最左边的值。

2024-01-22 23:19:48 723

原创 (十四)|110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和

例:假设 path 中的节点值是 [1, 2, 3],那么经过 map(str, path) 将得到 ['1', '2', '3'],然后通过 '->'.join(...) 将这些字符串连接起来,得到最终的字符串 '1->2->3'。所以递归前要加上判断语句,判断下面要递归的节点是否为空.当遇到左叶子节点的时候,记录数值,然后通过递归求取左子树左叶子之和,和 右子树左叶子之和,相加便是整个树的左叶子之和。如果该节点的左节点不为空,该节点的左节点的左节点为空,该节点的左节点的右节点为空,则找到了一个左叶子。

2024-01-21 15:18:10 850

原创 (十三)| 104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个

的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。反之,右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。例如:上面这棵二叉树,根节点的3的深度是1,节点9和20的深度是2,节点15和7的深度是3;在完全二叉树中,如果递归向左遍历的深度等于递归向右遍历的深度,那说明就是满二叉树。根节点3的高度是3,节点9和20的高度是2,节点15和7的高度是1.如果左子树为空,右子树不为空,说明最小深度是 1 + 右子树的深度。

2024-01-17 17:43:07 887

原创 (十二)|10.层序遍历 226.翻转二叉树 101.对称二叉树

递归的基本思路是,从根节点开始,递归地访问每一层的节点,并将它们的值添加到对应层的列表中。这道题用前序遍历和后序遍历解都可以,但是不能用中序遍历,因为中序遍历是左中右:先把左子树翻转,然后左子树和右子树换位置,接下来处理的右子树其实是第一步已经处理过的左子树,所以用中序遍历的话还有点绕。因为要比较的是根节点的两个子树是否是相互翻转的,进而判断这个树是不是对称树,所以要比较的是两个树,参数自然也是左子树节点和右子树节点。此时才进入单层递归的逻辑,单层递归的逻辑就是处理 左右节点都不为空,且数值相同的情况。

2024-01-14 23:00:14 885 1

原创 (十一)|二叉树理论基础+前中后序递归遍历 144.145.94

链式存储的二叉树节点的定义方式:和链表是差不多的,就是多了一个指针。

2024-01-12 15:15:57 318 1

原创 (十)| 239. 滑动窗口最大值 347.前 K 个高频元素

给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。给定一个非空的整数数组,返回其中出现频率前 k 高的元素。347.前 K 个高频元素。239. 滑动窗口最大值。返回滑动窗口中的最大值。需要回顾,暂时理解思路。

2023-12-13 15:13:33 23 1

原创 (九)|20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值

最后遍历完字符串,定义一个空字符串来接收结果(把栈中的元素持续弹出,直到栈为空),由于栈中的元素此时是倒序的,再把字符串反转一下就可以了。注意:假如现在字符串是["2", "1", "/",],那么首先遍历到2,把2加入到栈里,接着遍历到1,把字符1转换成long long型加入到栈中,此时栈顶的元素是1,也就是说此时num1=1,num2=2,那么接下来应该是num2/num1,而不是num1/num2。给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

2023-12-12 17:53:50 24 1

原创 (八)|232.用栈实现队列 225. 用队列实现栈

创建一个队列和创建一个栈的写法是相似的,需要指定队列中元素的类型,不过这也意味着队列中的元素必须是相同的数据类型,下面的代码表示创建一个字符串类型的队列。用一个队列来实现移除操作:把队列的前size-1个元素依次加入到队列的末尾,然后把前size-1的元素移除,那么此时front的元素就是原来的末尾元素。需要考虑出队操作中队列是否为空的情况,当且仅当“操作指令为出队,队列中的元素不为空,即。: 进栈操作,将新的元素放入到栈中,新的元素成为栈顶元素。: 获取队列的长度,即队列中元素的数量。

2023-12-11 21:05:44 16

原创 (七)|344.反转字符串541. 反转字符串II卡码网:54.替换数字151.翻转字符串里的单词卡码网:55.右旋转字符串

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。操作字符串时,如果发现对字符串进行一段一段的操作,那么for循环中的i可以一段一段的增加,而不是用原来的i++,定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。长度的函数,有两个重载函数,第一个参数都是替换之后的大小,第二个为替换的字母。一个指针i指向扩充之后的数组的尾部,另一个指针指向旧数组的尾部;

2023-12-07 16:34:29 23

原创 (六)| 454.四数相加II 383. 赎金信 15. 三数之和18. 四数之和

四数之和的双指针解法是两层for循环nums[k] + nums[i]为确定值,依然是循环内有left和right下标作为双指针,找出nums[k] + nums[i] + nums[left] + nums[right] == target的情况。但这里有一个问题,是判断 nums[i] 与 nums[i + 1]是否相同,还是判断 nums[i] 与 nums[i-1] 是否相同。把符合条件的nums[i], nums[left],nums[right]初始成一个数组,加到二维数组result中。

2023-12-05 15:38:06 17

原创 (五)|242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

把数组 1转换成哈希表(unordered_set)的形式,此时哈希表中存放的就是去重之后的元素,然后在哈希表中去查询有没有数组2中的元素,如果有,就把相应的元素加入到result里(定义一个unordered_set类型的result)那看一下如何检查字符串t中是否出现了这些字符,同样在遍历字符串t的时候,对t中出现的字符映射哈希表索引上的数值再做-1的操作。自己的思路:遍历两个数组,如果有相同的元素,就加入到一个新数组中,但是这样会导致新数组中元素重复不唯一。但是,数组中同一个元素不能使用两遍。

2023-12-04 15:32:41 31

原创 (四)| 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交142.环形链表II

删除倒数第n个节点,那么就要找到倒数第(n-1)个节点,让倒数第(n-1)个节点指向倒数第(n+1)个节点,所以要找到 倒数第(n-1)个节点,就要快指针先走(n+1)步,然后快慢指针再一起移动。其中的问题是:当虚拟头节点指向2时,节点1的指针如何获取呢,这时候就要创建一个temp1,先保存一下节点1,同理,创建一个temp2保存节点3的指针(这一步不太好想到)3.思路:创建一个虚拟头节点,让虚拟头节点指向节点2,节点2指向节点1,节点1指向节点3,这样就完成了一次交换两个相邻节点的操作。

2023-12-03 10:00:09 23 1

原创 (三)|203.移除链表元素 707.设计链表 206.反转链表

/ 单链表int val;// 节点上存储的元素// 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数。

2023-12-02 10:59:38 19

原创 (二)|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵

两层for循环:外循环i从0开始,内循环从i开始逐渐往后移动,并判断nums[i]+nums[j]是否达到目标值,如果大于等于target,记录下此时的数组长度,跳出此次循环;然后移动i,移动j,如果又找到了满足条件的数组,和之前的数组长度进行比较,取最小的。在暴力解法中,是一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环 完成了一个不断搜索区间的过程。也就是说这个语法的意思是,如果满足条件就返回:左边的值,不满足条件就返回:右边的值。

2023-11-30 20:59:53 818

原创 (一)| 704. 二分查找、27. 移除元素

704.二分查找,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的。二分法的两种写法:27. 移除元素暴力解法:两层for循环 (遍历数组,如果nums[i]==target,就把数组后面的值都往前移动一位,也就是nums[i]=nums[i+1])注意:如果for循环中result处如果写的是nums.size(),就会超出时间限制。

2023-11-29 23:09:05 786 1

Python-基础4-9 (3).docx

Python-基础4-9 (3).docx

2023-03-19

空空如也

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

TA关注的人

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