自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ubuntu使用WHEELTE N100并用rviz显示

写在最开头,如果wheeltec n100被自己改动过参数导致无法读取数据,建议在window的上位机中恢复出厂设置并重新上电,在转入ubuntu。因为我就是这个问题,客服远程操控才帮我解决的。

2023-07-13 20:39:41 680 1

原创 python环境VScode编辑器调用cvxopt失败

然后找到了编译好的文件xxx.whl下载,执行pip install C:/XXX/XXX/XXX本地安装。明明已经显示成功安装,在python的site-package也找得到,但是运行时还是显示找不到指定模块。再然后参考别人的方法,卸载了numpy和cvxopt,下载了新的numpy-kml。然后先本地安装numpy-kml,再本地安装cvxopt,听说顺序不能反,不过我没试验不知道。MPC控制算法需要cvxopt凸优化库的函数求解矩阵,在终端pip install cvxopt一直报错。

2023-06-19 10:09:47 517

原创 解数独--难的一批

因为解数独找到一个符合的条件(就在树的叶子节点上)立刻就返回,相当于找从根节点到叶子节点一条唯一路径,所以需要使用bool返回值。递归的下一层的棋盘一定比上一层的棋盘多一个数,等数填满了棋盘自然就终止(填满当然好了,说明找到结果了),所以不需要终止条件!是因为每一行每一列只放一个皇后,只需要一层for循环遍历一行,递归来遍历列,然后一行一列确定皇后的唯一位置。因为如果一行一列确定下来了,这里尝试了9个数都不行,说明这个棋盘找不到解决数独问题的解!本题与N皇后问题不同的是,递归维度又高了一层。

2023-06-10 11:49:55 668

原创 N皇后问题

因为回溯算法的特性,每一次递归都会在下一行中放置皇后,因此不可能在同一行中出现两个皇后。递归到第row行col列时,以此格左上角的一格为起点,一直往左上角去搜索(行--,列--),看是否出现了皇后。递归到第row行col列时,以此格右上角的一格为起点,一直往右上角去搜索(行--,列++),看是否出现了皇后。递归深度就是row控制棋盘的行,每一层里for循环的col控制棋盘的列,一行一列,确定了放置皇后的位置。从图中,可以看出,二维矩阵中矩阵的高就是这棵树的高度,矩阵的宽就是树形结构中每一个节点的宽度。

2023-06-09 11:53:21 857

原创 全排列II

同样是第二列,used[i] == true,是不是能继续递归的,不符合题意。但是第一列和第三列used[i] == false (这里i == 1),正常递归。所以要加一条if (used[i] == false) { ...... },如果没有判断语句 if (used[i] == false),则会出现将已经被加入的数字重复添加到排列中的情况。其实和上一节课的全排列几乎相同,不过上次是[1 2 3],这次是[ 1 1 2],那就面临重复选取的问题了。好像也不算难....返回所有不重复的全排列。

2023-06-07 11:03:16 463

原创 全排列--回溯

但排列问题需要一个used数组,标记已经选择的元素,如上图橘黄色部分所示。可以看出元素1在[1,2]中已经使用过了,但是在[2,1]中还要在使用一次1,所以处理排列问题就不用使用startIndex了。当收集元素的数组path的大小达到和nums数组一样大的时候,说明找到了一个全排列,也表示到达了叶子节点。这整体过程和思路真的和我前面几篇写的高度相似,很容易就能想到。组合的题目因为无序不能向前取,所以需要startIndex来控制向后取值。可以看出叶子节点,就是收割结果的地方。2、确定递归终止条件。

2023-06-06 09:51:06 270 1

原创 递增子序列

本题求子序列,很明显一个元素不能重复使用,所以需要startIndex,调整下一层递归的起始位置。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。而本题求自增子序列,是不能对原数组进行排序的,排完序的数组都是自增子序列了。这里选择使用unordered_set去重,局部变量,仅记录本层的内容。,找出并返回所有该数组中不同的递增子序列,递增子序列中。本题收集结果有所不同,题目要求递增子序列大小至少为2。中我们是通过排序,再加一个标记数组来达到去重的目的。3、确定单层递归逻辑。

2023-06-05 11:04:07 366

原创 子集II--(回溯+去重)

从图中可以看出,同一树层上重复取2 就要过滤掉,同一树枝上就可以重复取2,因为同一树枝上元素的集合才是唯一子集!,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。递归三部曲也不写了,没必要。要是自己想不起来了就去看前面的题解。用示例中的[1, 2, 2] 来举例,如图所示: (记得是加了个used来判断是树枝去重还是树层去重。返回的解集中,子集可以按。

2023-06-03 11:04:36 261

原创 子集-回溯算法

给你一个整数数组nums,数组中的元素。返回该数组所有可能的子集(幂集)。解集包含重复的子集。你可以按返回解集。

2023-06-02 10:36:45 450

原创 复原IP地址-回溯

需要切割四段,所以需要pointNum来记录点的数量。注意C++在使用insert函数插入'.'的时候,要在pos位置前插入,可能与其他语言不同。循环中 [startIndex, i] 这个区间就是截取的子串,需要判断这个子串是否合法。递归调用时,下一层递归的startIndex要从i+2开始(因为需要在字符串中加入了分隔符。情况就不同了,本题明确要求只会分成4段,所以不能用切割线切到最后作为终止条件,而是。,用以表示一个 IP 地址,返回所有可能的。回溯的时候,就将刚刚加入的分隔符。

2023-06-01 11:14:13 589

原创 分割回文串

在处理组合问题的时候,递归参数需要传入startIndex,表示下一轮递归遍历的起始位置,这个startIndex就是切割线。

2023-05-30 10:46:04 468

原创 组合总和 II

给定一个候选人编号的集合candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的每个数字在每个组合中只能使用。解集不能包含重复的组合。

2023-05-29 16:17:36 736

原创 组合总和--纯垃圾内容别看,浪费时间

此外还定义了int型的sum变量来统计单一结果path里的总和,其实这个sum也可以不用,用target做相应的减法就可以了,最后如何target==0就说明找到符合的结果了,但为了代码逻辑清晰,我依然用了sum。这里依然是定义两个全局变量,二维数组result存放结果集,数组path存放符合条件的结果。之前的选取是:选完2,就只能在下次选取时选[5,3]。从叶子节点可以清晰看到,终止只有两种情况,sum大于target和sum等于target。2 和 3 可以形成一组候选,2 + 2 + 3 = 7。

2023-05-28 18:10:05 972

原创 电话号码的字母组合--狗屎内容勿看

例如输入用例"23",两个数字,那么根节点往下递归两层就可以了,叶子节点就是要收集的结果集。图中可以看出遍历的深度,就是输入"23"的长度,而叶子节点就是我们要收集的结果,输出["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]。这个index是记录遍历第几个数字了,就是用来遍历digits的(题目中给出数字字符串),同时index也表示树的深度。参数指定是有题目中给的string digits,然后还要有一个参数就是int型的index。

2023-05-27 14:29:32 1102

原创 组合总和-回溯

i表示的是当前指针指向的地方(要加入path的数字),我们一共有9个数字,所以i的位置不能超过9-(k-path.size())+1这个地方,要不然根本组不成k个数字了。其实这里sum这个参数也可以省略,每次targetSum减去选取的元素数值,然后判断如果targetSum为0了,说明收集到符合条件的结果了,我这里为了直观便于理解,还是加一个sum参数。在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。当然,剪枝操作才是我们的基操。

2023-05-26 16:35:40 985

原创 组合问题-回溯算法

可以看出backtracking(递归函数)通过不断调用自己一直往深处遍历,总会遇到叶子节点,遇到了叶子节点就要返回。回溯法的搜索过程就是一个树型结构的遍历过程,在如下图中,可以看出for循环用来横向遍历,递归的过程是纵向遍历。但是如果找50个数的组合,嵌套50层for循环根本不可能,时间复杂度极高,所以要用回溯算法。for循环每次从startIndex开始遍历,然后用path保存取到的节点i。第一反应找两个数的组合,两层for循环暴力求解,此题可行。注意下重点在于后面的撤销操作,这样才能起到回溯的效果。

2023-05-21 17:26:37 529

原创 把二叉搜索树转换为累加树

返回为空后,自动跳出此轮递归,进入上一层递归,也就是cur指向的是最右下角的叶子结点。这一块还是比较好想的,就让cur->val一直加pre的值,然后再把这个值赋给pre。这里把pre定义成了一个整数,而不是指针。是因为考虑到对空指针操作可能会发生异常,反而代码更加复杂,用int类型的一样可以完成遍历。树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点。二叉搜索树是可以看成有序数组的,有序数组的累加很简单的就能想到用双指针,那么二叉树同样适用。

2023-05-19 11:36:32 361

原创 将有序数组转换为二叉树

3.确定单层递归逻辑前面说了,找nums这个有序数组的中值作为二叉树的根节点,怎么找呢?用int mid = (left + right) / 2;?那可不行,万一right == INT_MAX不就越界了吗。所以应该这样写:int mid = left + ((right - left) / 2);千万别觉着mid是小数怎么办,小数会被自动向下取整变为整数,莫得影响。

2023-05-18 11:35:05 630

原创 修剪二叉搜索树

给你二叉搜索树的根节点root,同时给定最小边界low和最大边界high。通过修剪二叉搜索树,使得所有节点的值在中。修剪树改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。可以证明,存在。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。[1,null,2]

2023-05-15 20:31:40 366

原创 删除二叉搜索树中的节点

对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。遇到空返回,其实这也说明没找到删除的节点,遍历到空节点直接返回了。另一个正确答案是 [5,2,6,null,4,null,7]。二叉树不包含值为 0 的节点。给定一个二叉搜索树的根节点。,删除二叉搜索树中的。

2023-05-13 11:46:42 533

原创 二叉搜索树中的插入操作

这里把添加的节点返回给上一层,就完成了父子节点的赋值操作了,即用上一层的结点接住新插入的结点。终止条件就是找到遍历的节点为null的时候,就是要插入节点的位置了,并把插入的节点返回。,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。,将值插入二叉搜索树。返回插入后二叉搜索树的根节点。只要按照二叉搜索树的规则去遍历,遇到空节点就插入节点就可以了。,新值和原始二叉搜索树中的任意节点值都不同。因为是二叉搜索树,所以不需要遍历整棵树。给定二叉搜索树(BST)的根节点。本函数使用返回值会比较简单。

2023-05-09 15:22:59 484

原创 二叉搜索树的最近公共祖先

因为是有序树,所有 如果 中间节点是 q 和 p 的公共祖先,那么 中节点的数组 一定是在 [p, q]区间的。如图,我们从根节点搜索,第一次遇到 cur节点是数值在[p, q]区间中,即 节点5,此时可以说明 p 和 q 一定分别存在于 节点 5的左子树,和右子树中。在搜索二叉树的公共祖先时,利用回溯从底向上搜索,遇到一个节点的左子树里有p,右子树里有q,那么当前节点就是最近公共祖先。所以当我们从上向下去递归遍历,第一次遇到 cur节点是数值在[p, q]区间中,那么cur就是 p和q的最近公共祖先。

2023-05-08 10:54:09 447

原创 二叉树的最近公共祖先

因为遇到 q 或者 p 就返回,这样也包含了 q 或者 p 本身就是 公共祖先的情况。中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(判断逻辑是 如果递归遍历遇到q,就将q返回,遇到p 就将p返回,那么如果 左右子树的返回值都不为空,说明此时的中节点,一定是q 和p 的最近祖先。图中节点10的左子树返回null,右子树返回目标值7,那么此时节点10的处理逻辑就是把右子树的返回值(最近公共祖先7)返回上去!

2023-05-03 10:54:42 433

原创 二叉搜索树中的众数

频率count 大于 maxCount的时候,不仅要更新maxCount,而且要清空结果集(以下代码为result数组),因为结果集之前的元素都失效了。应该是先遍历一遍数组,找出最大频率(maxCount),然后再重新遍历一遍数组把出现频率为maxCount的元素放进集合。如果不是二叉搜索树,最直观的方法一定是把这个树都遍历了,用map统计频率,把频率排个序,最后取前面高频的元素的集合。此时又有问题了,因为要求最大频率的元素集合(注意是集合,不是一个元素,可以有多个众数),如果是数组上大家一般怎么办?

2023-05-02 12:38:52 632

原创 二叉搜索树的最小绝对差

最直观的想法,就是把二叉搜索树转换成有序数组,然后遍历一遍数组,就统计出来最小差值了。其实在二叉搜素树中序遍历的过程中,我们就可以直接计算了。需要用一个pre节点记录一下cur节点的前一个节点。那么二叉搜索树采用中序遍历,其实就是一个有序数组。差值是一个正数,其数值等于两值之差的绝对值。给你一个二叉搜索树的根节点。

2023-05-01 22:13:25 573

原创 验证二叉搜索树-递归双指针法

此时可以初始化比较元素为longlong的最小值。当然也可以避开设置最小值来比较,例如采用双指针法一样可以得到结果。样例中最小节点 可能是int的最小值,如果这样使用最小的int来比较也是不行的。节点10大于左节点5,小于右节点15,但右子树里出现了一个6 这就不符合了!根节点的值是 5 ,但是右子节点的值是 4。,判断其是否是一个有效的二叉搜索树。所以以上代码的判断逻辑是错误的。给你一个二叉树的根节点。

2023-04-30 20:44:22 623

原创 二叉搜索树中的搜索

你需要在 BST 中找到节点值等于 val 的节点。返回以该节点为根的子树。如果节点不存在,则返回 null。给定二叉搜索树(BST)的根节点 root 和一个整数值 val。这就决定了,二叉搜索树,递归遍历和迭代遍历和普通二叉树都不一样。输入:root = [4,2,7,1,3], val = 2。输入:root = [4,2,7,1,3], val = 5。本题比较简单,不写过程了,直接看代码就懂了!输出:[2,1,3]

2023-04-28 21:36:58 725

原创 合并二叉树-递归法

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。输入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]输入:root1 = [1], root2 = [1,2]给你两棵二叉树: root1 和 root2。输出:[3,4,5,5,4,null,7]

2023-04-18 10:24:20 132

原创 最大二叉树

[3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5]。- [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1]。- [2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1]。- [0,5] 中的最大值是 5 ,左边部分是 [0] ,右边部分是 []。输出:[6,3,5,null,2,0,null,null,1]输入:nums = [3,2,1,6,0,5]输出:[3,null,2,null,1]

2023-04-09 16:02:33 407

原创 从中序与后序遍历序列构造二叉树

二叉树的生成

2023-04-04 12:03:46 315

原创 PID控制机器人侧向跟随人类

代码注释很详细了,希望n天后我回来还能看得懂。那就不写了,直接上代码(骂骂咧咧)

2023-04-03 19:56:10 169

原创 二叉树路径总和第2题

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。

2023-03-31 11:45:19 42

原创 二叉树路径总和第一题

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum。如果存在,返回 true;否则,返回 false。叶子节点 是指没有子节点的节点。

2023-03-31 10:55:08 340

原创 寻找二叉树左下角的值

寻找二叉树左下角的值、递归法、迭代法

2023-03-28 10:30:57 305

原创 二叉树左叶子之和

给定二叉树的根节点 root ,返回所有左叶子之和

2023-03-26 11:33:24 261

原创 二叉树的所有路径

二叉树的所有路径、递归法、回溯

2023-03-24 11:38:17 159

原创 平衡二叉树-递归法

平衡二叉树、递归法

2023-03-23 10:33:05 369

原创 完全二叉树的节点个数——递归法

完全二叉树的节点个数、递归法

2023-03-22 10:50:19 514

原创 二叉树的最小深度——递归法、迭代法

二叉树最小深度、C++、递归法、迭代法、ChatGpt注释

2023-03-21 11:11:47 1107

原创 二叉树的最大深度

C++、二叉树最大深度、迭代法、递归法、ChatGpt注释

2023-03-20 12:04:05 726

空空如也

空空如也

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

TA关注的人

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