自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 问答 (1)
  • 收藏
  • 关注

原创 代码随想录算法训练营第二十天 | Java |530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

本题从下向上寻找比较方便,确定p和q的子树后找到他们的离他们最近的共同祖先,即深度最大的公共祖先。采用后续遍历的方法,左右中,逻辑上的从下至上。当找到p或q时,返回找到的节点,若都找到时,就可以返回公共祖先。中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(中序遍历时,记录前一个遍历节点的值,得到当前节点与前一个节点的差值,更新得到最小差值,本思路只需要遍历一次二叉树即可。(即,出现频率最高的元素)。

2024-09-25 21:34:34 411

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

当root1和root2中均存在该节点结构,只需要将节点值相加,如果节点结构不同,则按照存在节点结构的二叉树生成。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;当root1中无该节点结构,root2中有该节点结构时,直接将root2中以该节点为根节点的子树连接到原处即可。同理,root2无节点结构,root1 有该节点结构时,直接将以该节点为根节点的子树连接到原处。采用遍历的方法虽然可以比较当前节点是否符合左小右大的条件,但是不能保证二叉树整体的搜索特性。

2024-09-24 10:56:45 781

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

中序遍历,从头到尾依次为左子树、根节点、右子树。取后续遍历的最后一个元素,即为当前根节点,在中序遍历的数组中找到其下标位置,下标以前的都是左子树的部分,下标以后的都为右子树的部分,据此划分出两个新的中序遍历表。根据新生成的中序遍历中的元素个数划分出新的后续遍历表,这里注意,后续遍历表每次都从后向前退一个元素。寻找树左下角的值,目标为树最低层,最左边的节点的值。这里注意如果这棵树最低层只有右叶子节点,但它相对来说也是最低层的左边 ,因此本题采用层序遍历,记录每层遍历的第一个节点的值即可。是二叉树的中序遍历,

2024-09-19 20:23:43 937

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

若当前完全二叉树为满二叉树,可根据 节点数=2^树深-1 来计算,如何判断是否为满二叉树,根据根节点分别遍历最左边和最右边的层数来比较,若数值一致,则说明为满二叉树,若不一致,按照递归方法实现。最好的方式是在叶子的父节点上进行判断,父节点的左孩子是否为空,左孩子的左右节点是否为空,据此来判断是否为左叶子。的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。,返回所有从根节点到叶子节点的路径。,求出该树的节点个数。

2024-09-18 16:10:19 677

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

其次,当发现子字符串首字符匹配时,需要一个状态标记sign=1,当子字符串遍历结束时,sign仍为1表明找到匹配的子字符串;若遍历子字符串中间发现不匹配字符时,该匹配过程中断,外层大循环从发现匹配子字符串的首字母向后一位开始重新匹配,sign=0,子字符串遍历位置归零。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。是由非空格字符组成的字符串。

2024-09-04 14:50:36 647

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

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。其次判断剩余部分是否满足2k的要求,大循环判断翻转是否结束,内部嵌套一个循环判断剩余量翻转位置,此处采用最小值函数比较当前位置是否大于2k。首先遍历原数组得到替换后新数组的长度,然后从后向前遍历,遇到数字就用‘number’替代。转置结束节点,模拟双指针 i , j ,当 i < j 时,转置结束。输入字符串以字符数组。数组转置,从后向前遍历,模拟双指针,交换指针位置上的字符。

2024-09-03 20:22:11 327

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

首先遍历magazine数组,生成字母元素集合,然后遍历ransomNote数组,当出现某个元素时,在magazine对应的表中-1,当元素值小于0时,证明生成失败。首先遍历数组a,b,将a+b的和生成unorderedMap,key值记录和的值,value记录和出现的次数。然后遍历数组c,d,当前表中存在满足 0-(c+d) 的元素,证明有元素能满足题意,count对应增加。本题同第一题不同,本题要求在一个数组中找到三个不同的元素组成的集合满足和为零,且元素不重复。只输出元素集合,不考虑元素原下标。

2024-07-04 16:29:25 430

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

本题考查数组交集,即两个集合中重复的元素,立刻想到使用哈希表。判断是否无限循环的问题,若每轮循环结束后的 sum 值都未出现,则一直运行,若出现重复元素,则说明是无限循环的,这里使用 set 来判断。其次,需要记录符合条件元素的下标,此时考虑使用 map,不仅记录 Key 值,还保存元素 Value。字符串仅包含26个小写字母,利用数组下标区分不同字母,数组数值记录元素出现次数,遍历 s 时累加,遍历 t 时递减,最终遍历字母数组,若均为 0 ,则证明两个字符串为字母异位词,反之不是。

2024-06-13 11:32:30 622 2

原创 代码随想录算法训练营第二十五天 | Java |216.组合总和III,17.电话号码的字母组合

其次,开始抽象树形结构:按序操作,树的宽度为第一个数字映射的字母的个数,树的深度为数字的个数。首先抽象出的树形结构中,只能使用1-9,因此树的宽度为9;本题要求求k个数之和,因此树的深度为k。其次,解决本题需要考虑和的情况,因此回溯函数中要记录和,需要设置一个参数记录这一数值。为便于操作,可设计辅助字符串数记录数字和字母的映射关系。因为本题要求加和为n的K个数,所以在结束判别时当和、个数超出时都可直接判断结束。该列表不能包含相同的组合两次,组合可以以任何顺序返回。的字符串,返回所有它能表示的字母组合。

2024-04-15 14:23:18 300 1

原创 代码随想录算法训练营第二十四天 | Java |【回溯算法】,77. 组合

首先,组合不排序,只考虑元素个数。常规思路for循环嵌套,数值大时不现实。考虑回溯,即递归,逐层向下。【感觉掌握的还是皮毛】回溯后要退回上一步位置,退回很重要。其次,剪枝也可以再一定程度上减少计算压力。抽象为树形结构理解,集合大小为树的宽度,递归深度为树的深度。本质是暴力穷举,和递归函数相辅相成。

2024-04-13 13:17:20 245

原创 代码随想录算法训练营第十五天 | Java |102层序遍历,226.翻转二叉树,101.对称二叉树

借助队列记录每层的数据值,每层的队列单独保存到一个元素中。注意:递归法中递归执行的位置很重要,在判断左右节点都存在且相等后再向下判断;思路:首先要判断根节点下的左右节点是否都存在且数值相等,然后再执行递归,判断左右子树外侧和内侧是否对称。注意:遍历顺序要注意,迭代法用广度遍历实现,递归法用深度遍历(前序、后续遍历)。注意:有一个表记录每层的输出元素,有一个辅助队列记录当前层的元素。思路:翻转二叉树,实质上就是调换每个节点的左右节点。,翻转这棵二叉树,并返回其根节点。题目:给你一个二叉树的根节点。

2024-04-12 22:48:40 299 1

原创 代码随想录算法训练营第二十三天 | Java |669. 修剪二叉搜索树,108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树

搜索二叉树可以看成一个单调递增的数组,累加大于或等于当前节点值的和,可以看成从后向累加数组元素,替换当前节点值,因此这个一个遍历顺序的问题。考虑二叉搜索树是有序的,那么当当前节点值小于范围时,删除当前节点,保留当前节点的右子树;当当前节点大于范围时,删除当前节点,保留当前节点的左子树。递归法容易理解,迭代法分左右子树操作时,考虑到二叉搜索树的有序性,不符合范围的左/右子树直接跟随节点删除了。树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点。

2024-04-12 16:58:23 354 1

原创 代码随想录算法训练营第十四天 | Java |【递归遍历、迭代遍历】144.二叉树前序遍历,145.二叉树后续遍历,94.二叉树中序遍历

个人认为结点定义类似于链表结点定义的一种形式。

2024-04-05 21:53:23 235 1

原创 代码随想录算法训练营第十三天 | Java |239. 滑动窗口最大值,347.前 K 个高频元素

(2)进阶思路:用map记录元素值和出现次数,用大顶推排序后输出前K个值。(1)最初思路:用两个表分别记录元素值和元素出现次数,根据出现次数表排序后,对应将元素值表调整顺序,依次输出前K个值。(1)最初思路:用队列模拟窗口,依次取k个值比较得出最大值,后续弹出队首元素,添加队尾元素,比较最大值,循环结束。(2)进阶思路【看教程后】: 窗口移动中维护单调递减队列,确保留在队列中队首元素为当前窗口中的最大值。的滑动窗口从数组的最左侧移动到数组的最右侧。进阶思路中需要自定义队列,各方法需要重写。

2024-04-05 15:20:08 197 1

原创 代码随想录算法训练营第十一天 | Java |20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

最复杂的是用循环,当出现重复时覆盖当前重复元素后,循环倒退回开头再次开始,时间复杂度最高。合理的选择递归或者栈,栈更适合一点。当前元素如果和栈顶元素一直,栈顶元素出栈,向后遍历比较,最终留在栈中的为不重复的剩余元素。遇到左半符号‘(’,‘{’,‘[’按照右半符号进栈,遇到右半符号直接与栈顶元素比较,如何一致,证明匹配。思路:实质为实现后缀表达式,用栈实现。当遇到数字入栈,遇到符号将前两个数字出栈组合符号进行计算,将得到的结果入栈,继续遍历。:如果使用循环,请注意每次删除重复元素后要从头开始循环。

2024-04-02 22:29:49 246 1

原创 代码随想录算法训练营第十天 | Java |232.用栈实现队列,225. 用队列实现栈

栈与队列操作注意:栈(Stack):push,pop,top,isEmpty队列(Queue):add,pop,peek,isEmpty。

2024-03-29 16:14:16 380 1

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

还可以采用双指针法,一个指针定位链表尾部,另一个指针定位删除结点前一位,两个指针间隔n。: 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。两个链表可以相交,相交结点一致,相交部分长度一致,因此链表长度不同时一定是以短链表长度为比较起点。其次,确定入口位置。双结点使用时一个记录当前交换对的第一个结点,另一个记录下组交换对结点的位置。相交部分是同一结点,因此地址是一致的,比较时注意不要单纯以结点值为评判标准。链表尾部指针先走n位,然后定位指针和链表指针同步行进。个结点,并且返回链表的头结点。

2024-03-28 00:22:13 1115 1

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

的节点的值:首先需要考虑index的合法区间,因为初始化中包含一个虚拟头结点,所以index[0,size-1]。的节点之前:首先判断index的范围,见代码注释。注意:进行删除操作需要将指针停到满足删除条件的节点前一位,否则删除当前节点指针指向出现问题,因此采用虚拟头结点的方法遍历链表。另外,该函数需要返回链表新的头结点,需要记录头结点信息,因此需要保留虚拟头结点指向真实的头结点。思路:删除链表中值为val的节点,边遍历链表边删除满足条件的节点。,请你反转链表,并返回反转后的链表。

2024-03-26 21:42:59 1444

原创 代码随想录算法训练营第二天 | Java | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

(二)滑动窗口(双指针):子数组起始( i )和结束( j )位置均从下标0开始,比较子数组和 sum 和目标值 target 的大小关系,当 sum < target 时,j++,重新计算子数组总和然后比较;当 sum >= target 时,与子数组元素个数的原纪录比较并记录小值,sum减去当前起始位置的值,i++,重新计算子数组总和然后比较,循环往复。双指针法需要借助辅助数组记录平方排序结果,当 i > j 时,数组元素已遍历结束,程序判停。(一)暴力法:两次循环,首先逐个求平方,其次重新排序。

2024-03-22 00:29:43 303 1

原创 代码随想录算法训练营第一天 | Java | 704. 二分查找、27. 移除元素

注意:当前下标元素首次删除后,需要重新判断更新数组在当前下标位置是否仍然与目标值相等,如果相等需要继续删除,因此最外层循环推荐使用while循环,程序判断结束条件为遍历结束。思路:移除元素首先考虑遍历问题,当遍历过程中遇到目标值,从当前下标位置开始数组更新(删除当前元素,其余元素向前移动一位),以此类推。思路:二分法首要考虑左右区间的设定,其次考虑中间值与目标值比较后左右区间的变化。的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用。你不需要考虑数组中超出新长度后面的元素。

2024-03-20 21:28:24 349

原创 力扣面试经典150题——80.删除有序数组中的重复项||【C++】

结题思路:参考27题移除元素下标标记方法,本次注意要记录的是后一项。

2023-11-20 20:01:14 126 1

原创 力扣每日一题——2342.数位和相等数对的最大和【C++】

题主原代码,暴力求解,解题思路:遍历求出每个数数位和,按照排序思路找出相等数对,再求和。借鉴一下大佬的思路:哈希+排序。71/83通过,超出时间限制。

2023-11-18 15:30:38 68 1

原创 力扣面试经典150题——26.删除有序数组中的重复项【C++】

解题思路:从i=0,j=i+1开始,依次向后比较,当nums[i]!=nums[j]时,用K记录当前元素,i=j,j++依次向后递增;当nums[i]== nums[j]时,j的下标向后移动。注意:i,j 的下标范围,容易出现数组访问下标溢出。

2023-11-18 13:01:37 117 1

原创 力扣面试经典150题——27.移除元素【C++】

答主原思路:从后向前遍历元素,当元素等于val时,将当前元素置为数组最后一个元素,数组长度减一,但是一直报错显示溢出,欢迎是这个思路的朋友们一起来 讨论。

2023-11-16 22:42:50 128

原创 力扣面试经典150题——88.合并两个有序数组【C++】

反思:从后向前直接比较两组数元素大小,插入原数组,情况较多。

2023-11-09 16:40:23 176 1

原创 【TI毫米波雷达】IWR6843AOPEVM在mmWave_Demo_Visualizer的初步使用

IWR6843AOPEVM在mmWave_Demo_Visualizer的初步使用

2023-10-12 19:40:28 338 4

原创 “pip install airflow”屡屡失败的解决方法

出现这个错误是因为代码中使用了 airflow 模块,但是当前 Python 环境中没有安装 airflow 模块或者没有正确找到 airflow 模块。来检查已经安装的包列表中是否包含 airflow 模块。确认是否正确设置 Python 环境变量:如果已经安装了 airflow 模块,但是依然出现了。如果使用了虚拟环境,请确认是否在虚拟环境中安装了 airflow 模块,并且已经激活了虚拟环境。确认是否已经安装 airflow 模块:可以使用命令。替换为实际的 airflow 安装路径。

2023-05-16 15:17:34 517

原创 解决新版pyqtgraph中module ‘pyqtgraph.Qt.QtGui‘ has no attribute ‘QApplication‘的问题

在新版的PyQt库中,

2023-05-13 14:17:03 3118

空空如也

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

TA关注的人

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