自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录算法训练营 day 31 | Leetcode 56 738

Leetcode 738 单调递增的数字。Leetcode 合并区间。

2024-08-30 20:58:37 124

原创 代码随想录算法训练营 day 30 | Leetcode 452 435 763

Leetcode 452 用最少的箭引爆气球。Leetcode 763 划分字母区间。Leetcode 435 无重叠区间。

2024-08-30 20:56:37 190

原创 代码随想录算法训练营 day 27 | Leetcode 376 53 455

Leetcode 53 最大子数组和。Leetcode 455 分发饼干。Leetcode 376 摆动序列。尽可能利用每个饼干满足胃口大的。每次sum小于零,就重新计数。

2024-08-26 21:53:32 171 1

原创 代码随想录算法训练营 day 25 | Leetcode 491 46 47

46和491的结合,由于集合中有重复元素,但是结果中不能重复,因此既需要用一个unordered_set对树层去重,有需要用used来跳过已使用的元素。这里要注意不能对序列排序,使用一个unordered_set对数层天然去重。很简单,需要使用一个used来记录是否访问过。Leetcode 491 非递减子序列。Leetcode 47 全排列Ⅱ。Leetcode 46 全排列。

2024-08-24 16:23:58 194

原创 代码随想录算法训练营 day 24 | Leetcode 93 78 90

Leetcode 93 复原IP地址。Leetcode 90 子集Ⅱ。Leetcode 78 子集。

2024-08-23 21:59:29 122

原创 代码随想录算法训练营 day 23 | Leetcode 39 40 131

Leetcode 131 分割回文串。Leetcode 40 组合综合Ⅱ。Leetcode 39 组合总和。

2024-08-23 21:57:06 124

原创 代码随想录算法训练营 day 21 | Leetcode 669 108 538

Leetcode108 将有序数组转换为二叉搜索树。Leetcode538 把二叉搜索树转换为累加树。Leetcode 669 修剪二叉搜索树。

2024-08-21 20:46:30 115

原创 代码随想录算法训练营 day 22 | Leetcode 77 216 17

Leetcode 216 组合Ⅲ。Leetcode 电话号码的组合。Leetcode 77 组合。

2024-08-21 20:43:42 111

原创 代码随想录算法训练营 day 19 | Leetcode 235 701 450

1. 未找到被删除的key,不做任何处理;2.被删除的key,左子节点为空,右不空,右孩子补位;3.被删除的key左空右不空,左孩子补位;4.被删除的key左右都不空,左孩子插入到右孩子的最左下角;5.被删除的key左右都空,直接删除。尽管插入结果有多种可能,但是由于二叉搜索树的有序性,有一种情况是value总是被插到叶子节点上。由于二叉搜索树是有序的,p和q的最近公共祖先总是出现在p<root -> val < q的节点。Leetcode 二叉搜索树的删除操作。

2024-08-19 21:46:40 138

原创 代码随想录算法训练营 day 18 | Leetcode 530 501 236

首先,可以先遍历一边二叉树,并使用一个map记录下树中元素出现的次数,再从unordered_map中得到众数。其次,可以利用二叉搜索树的特性,使用中序遍历和双指针来模拟对有序数组的众数求取过程。刚开始觉得最小绝对值一定出现在一个节点与它的左右子节点,后来发现不是专业。二叉搜索树的处理,可以使用中序遍历得到一个有序数组进行处理。Leetcode 530二叉搜索树的最小绝对值。Leetcode 236 二叉树的最近公共祖先。Leetcode 501 二叉搜索树的众数。

2024-08-17 16:22:21 188

原创 代码随想录训练营day 17 | Leetcode

题述:将两个二叉树合并,如果在某个节点都有值则得到两个二叉树节点值的和。首先找到数组的最大值,作为根节点,然后以此划分左右区间分别为左右子树。需要同时遍历两个二叉树。传入两个二叉树的根节点,返回合并后的根节点。题述:给定一个不含重复项的数组,构建最大二叉树。Leetcode 700 二叉搜索树中的搜索。Leetcode 98 验证二叉搜索树。Leetcode 654 最大二叉树。Leetcode 617 合并二叉树。二叉搜索树的左子树<根节点<右子树。二叉搜索树的中序遍历是一个升序数组。

2024-08-16 16:44:11 150

原创 代码随想录训练营day 16| Leetcode

Leetcode 513 找树的最左下角叶子。Leetcode 106 中序后序构造二叉树。使用迭代的层序遍历方法会更简单一些。Leetcode 112 路径求和。

2024-08-15 21:21:39 231

原创 代码随想录训练营day 15【补】| Leetcode 104 111 110 257 404 222

一个节点的深度是指从根节点到该节点的层数,而高度是指从该节点到其子叶节点的层数。前序是求深度,后续是求高度。最小深度是指从根节点到它的叶子节点的最小值。Leetcode 222 完全二叉树的节点数。Leetcode 104 二叉树的最大深度。Leetcode 111 二叉树的最小深度。Leetcode 257 二叉树的所有路径。Leetcode 404 左叶子节点之和。Leetcode 110 平衡二叉树。按照普通的二叉树遍历。

2024-08-15 16:26:51 114

原创 代码随想录算法训练营day 14 | Leetcode 144

使用递归法,对一个root,翻转它的左右子节点,再翻转左右子树。递归问题需要明确函数参数及返回值,递归结束条件,单层递归的过程。因为中序遍历实际节点的访问顺序与处理顺序(中序遍历顺序)并不相同,总是先访问中,而非左,因此需要用一个指针控制访问节点。后序的顺序是左右中,可以先中右左,再翻转结果。Leetcode 226 翻转二叉树。Leetcode 101 对称二叉树。Leetcode 144 前序遍历。Leetcode 145 后序遍历。Leetcode 94 中序遍历。

2024-08-14 21:39:11 246

原创 代码随想录训练营day 13【补】| Leetcode

Leetcode 144 二叉树的前序遍历。Leetcode 145 后序遍历。Leetcode 102 层序遍历。Leetcode 94 中序遍历。

2024-08-13 21:24:37 141

原创 代码随想录算法训练营day 11 | Leetcode 150 239 347

用一个单调队列来存储所有可能的最大值,单调队列可以用双向队列deque来实现,要熟悉stack,queue,deque的操作。学习priority_queue的使用,包括声明,push pop top size empty,重载运算符和重写仿函数,大顶堆和小顶堆。学习迭代器和指针的区别,迭代器是一种对象,指针是一种变量。解引用操作符*用于获取指针所指对象的值,而箭头操作符用于访问指针所指对象的成员,通常用在结构体和类中,类似于先解引用再访问成员。等价于int *p = &i;

2024-08-10 17:15:36 263 1

原创 代码随想录算法训练营day 10 | Leetcode 232

学会减少重复代码,遇到两个相似功能时,避免把代码复制粘贴过来改,学会抽象代码,减少冗余。这里peek()函数需要用到类似pop()的功能,可以用this指针,避免再写一遍。随后看了官解,在遍历s时,左括号入栈进行匹配时要区分三种情况,代码冗余多,而右括号入栈只需判断栈顶和s[i]是否相等,代码会简洁很多。同样使用栈来完成,当遍历到第i个元素时,如果和栈顶元素相同,则弹出当前栈顶,继续遍历i+1.同样的模拟方法,这里只需要一个队列即可,出栈时只需要将队列的front元素移动到队列末尾。

2024-08-09 15:22:52 261 1

原创 代码随想录算法训练营day 9 | Leetcode 151 28 459 Kama 55

在暴力求解的时候,当我们选择从haystack的第0个元素开始遍历,发现到第i个元素与needle不相同时,会直接从第1个元素开始遍历。当haystack从第i个元素开始,匹配到第i + j个元素失败时,此时needle对应匹配到第j个元素,暴力解法选择从第i+1个元素重新开始,而根据前缀表next可知,needle中的第0到next[j] -1元素,与第j - next[j] + 1到第j元素是相同的,因此haystack下一次遍历可以从对应的第i+j - next[j] +1个元素开始。

2024-08-08 21:42:16 356

原创 代码随想录算法训练营day 8 | Leetcode 344

Leetcode 344 翻转字符串。Leetcode 541 翻转字符Ⅱ。注意什么时候可以使用库函数。Kama 54 替换数字。主要还是输入输出的问题。

2024-08-07 15:37:29 170

原创 代码随想录算法训练营day 7 | Leetcode 454 383 15 18

不管怎么样,还是要先对数组排序,然后注意题目中无重复的要求,需要特别操作。在遍历数组的前提下,使用双指针寻找(0-nums[i]),left指向i+1,right指向nums.size()-1,移动的条件为相同的值只用一次。本题没有要求去重,可以用一个unordered_map先保留A+B,再枚举nums3和nums4,查询是否有(0-C-D)。和三数之和一样,只不过要再加一层循环,注意int类型数据溢出。Leetcode 15 三数之和。Leetcode 18 四数之和。

2024-08-06 14:46:54 189

原创 代码随想录算法训练营day 6 | Leetcode 242 349 202 1

2. set:包括std::set, std::multiset, std::unordered_set,优先使用unordered_set,如果要求集合有序,使用set,如果有重复项,使用multiset;3. map:同样包括std::map, std::multimap, std::unordered_map,set只存储key,map存储key-value对。2. 用数组,set,还是map:首先判断,元素是否已知有限,如果否则不能使用数组,且如果数组元素少,哈希值很大会浪费内存。

2024-08-05 15:01:19 316

原创 代码随想录算法训练营day 4 | Leetcode 24 19 02.07 142

这道题很巧,先让一个fast每次走两步,再让一个slow每次走一步,相遇之后再让一个指针从相遇点和头节点同时每次走一步,再次相遇就是环形的入口。看了官解之后,使用双指针法,首先fast指向n+1,slow指向头节点,fast移动到末尾时,slow刚好移动到倒数第n+1个节点。看到题目最开始没理解题的意思,特别是奇数个链表时的情况。要注意空链表和只有一个节点的情况。首先暴力解法,先遍历节点得到链表大小,然后再遍历size-n,进行删除。先求两个链表的大小,然后让两个链表都从相同长度开始遍历。

2024-08-03 21:56:23 311

原创 代码随想录算法训练营day 3 | Leetcode 203 707 206

链表是一种通过指针串联在一起的线性结构,在内存空间不是连续存储的。单链表包括一个值value,以及指向下一个节点的指针。单链表头节点为head,尾节点指向nullptr。有双指针和递归两种方法,两种方法类似。一个指针cur指向当前的节点,一个指针指向前一个节点,设置一个保留当前节点的tmp。有两种方法,一种是对头节点和非头节点分别操作,另一种是在头节点前增加一个虚拟头节点,从而对所有节点应用一个操作。这里主要注意掌握链表的几种操作,包括定义、查询、插入(在头、中间、尾)、删除。day 3 主要学习链表。

2024-08-02 19:06:41 290

原创 代码随想录算法训练营day 2 | Leetcode 209 长度最小的子数组

首先,如果采用暴力求解,即两个for循环,第一个for控制子数组起始位置,第二个for控制子数字结束位置,保留并更新大于等于target的最小子数组长度。只使用一个for循环完成,for循环控制子数组的结束位置j,j不断增加,当子数组的和大于等于target时,收缩子数组的起始位置直到小于target,同样不断保留和更新最小数字长度。最后学习了官方解答,同样是滑动窗口,遍历right,如果unordered_map里的种类超过两个开始移动left,其中注意删除value为0的key。

2024-08-01 17:46:55 272

原创 代码随想录算法训练营day 1 | Leetcode 704,35,34,27,26,283,997

首先讨论查找值和数组的关系,分别是:1)在数组值域外;和普通的二分查找相比,普通的二分查找在没有重复元素时第一次找到target就退出循环,但是找边界在第一次找到之后仍需要继续移动指针,找左边界时,要移动右指针,直至离开target范围。看了代码随想录的思路后,重写了快慢指针的双指针,slow指向新数组的下标,fast指向遍历旧数组的元素,slow保存下fast所指的不等于val的元素。区间的开闭影响了while()终止条件和左右指针的移动(加减一还是否),这取决于元素是否在区间内。

2024-07-31 16:23:51 411

原创 UGV轨迹跟踪控制学习笔记

输出的轨迹信息/速度指令作为控制模块的输入,在控制算法的作用下,结合系统底盘的运动学模型进行正解(将系统期望速度解算为每个车轮的速度,反之,逆解为将电机编码器得到的车轮速度计算为底盘速度——航迹推演)。另一方面,需要接收ROS发出的期望速度的控制指令,并通过串口传输给下位机。在搭建一个能够实现自主导航的机器人系统时,在硬件上,最常使用的方案是使用一个上位机(如树莓派、jetson nano等)实现感知定位规划算法,并使用一个下位机(如DSP、单片机等)实现对底盘的底层控制,两者采用一定的通信方案。

2023-10-26 19:49:25 438

原创 【源码学习笔记】Towards Efficient Trajectory Generation for Ground Robots beyond 2D Environment

源码中共包括11个功能包,其中map_manager用于实现地图的初始化和计算,planner_algorithm用于实现前端的A*路径规划和后端的轨迹优化,planner_manager是整个程序的入口,定义了工程框架和算法的调度,read_pcd实现了pcd文件的读取和发布。

2023-08-18 10:14:01 213 5

空空如也

空空如也

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

TA关注的人

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