- 博客(50)
- 收藏
- 关注
原创 Vins-mono中的IMU预积分【SLAM】
表示,这样做的原因是四元数表示旋转本身是过参数化的,另外用旋转向量表示求雅可比矩阵方便一些,符合平常的计算习惯,平常不用旋转向量的原因是旋转向量具有周期性,但是在误差卡尔曼中不存在周期性这个问题,误差都是小量。实际IMU信息是离散的,所以要得到离散时间下的IMU预积分公式,可以用Euler、中值积分、RK4进行数值积分求IMU预积分。可以看出预积分量只和状态量中的零偏有关,如果零偏更新了,就用预积分对零偏的一阶雅可比更新预积分。这里离散化用的是中值积分,所以。的雅可比矩阵,其实二者有很大的关系。
2024-04-22 18:52:37
1094
原创 IMU预积分【SLAM】
预积分的推导过程比较多,所以这里只记录关键结论。其实这些公式不太好记忆,因为预积分推导过程的想法来源很巧妙,无法看出物理意义。一切推导的来源:最好记忆的旋转相对运动量:△Rij≐RiTRj=∏k=ij−1Exp((ω~k−bg,k−ηgd,k)△t)\triangle R_{ij} \doteq R_{i}^{T}R_{j} = \prod_{k=i}^{j-1}Exp((\tilde{\omega}_{k}-b_{g,k}-\eta_{gd,k})\triangle t) △Rij≐RiTRj
2024-03-29 17:57:27
1076
1
原创 SLAM中的三维运动学【SLAM】
物体在连续时间下运动的位姿由Rt和tt表示,根据RRtTRtI公式两边对时间tRt˙TRtRtTRt˙0RtTRt˙−RtTRt˙T可以发现RtTRt˙是反对称矩阵,不妨取ωt∧RtTRt˙,后面推导会发现ωtRt˙Rtωt∧t上面的方程称为泊松方程(Poinsson Formula),这是一个微分方程,但是不要对它直接求解,我们假设ω。
2024-03-28 15:04:48
867
原创 SLAM中的李群与李代数【SLAM】
本人从SLAM问题的角度出发得出的结论目前是这样的:在SLAM问题中,为了表示旋转姿态需要旋转矩阵或者四元数,在后端优化过程中为了求解非线性优化问题需要求雅可比矩阵,即求导;在运动学的描述中也需要求导;这两种情况中一般是对位姿求导,这时就产生了一个矛盾:根据导数的定义可知,对某一个变量求导,定义中需要该变量产生微小增量,为了保证物理意义的正确,我们希望该变量对加法是封闭的,而旋转矩阵或者四元数对加法都不封闭,所以引入李代数。SO3±π。
2024-03-27 19:22:44
904
原创 旋转矩阵、旋转向量、欧拉角、四元数【SLAM】
nSOnR∈Rn×n∣RRTIdetR1SOn是特殊正交群(Special Orthogonal Group)。R是正交矩阵,满足RRTI。行列式为1是人为定义的,实际行列式可以为±1,行列式为−1的称为瑕旋转,即一次旋转加一次反射,三维矩阵行列式的意义是变换后的体积与原体积的比,行列式为1说明体积不变,旋转变换就是体积不变。1、SO3的旋转矩阵有9个量,一次旋转只有3个自由度,所以这种表达方式是冗余的。
2024-03-27 14:05:10
838
原创 卡尔曼滤波(Kalman Filter)公式【SLAM】
状态更新前,观测值减去预测值得到的残差;未经状态更新的测量残差(本人翻译可能不准确,所以给出概念的英文描述,资料来自。
2024-03-26 14:43:28
758
原创 代码随想录算法训练营第五十一天 | 139.单词拆分
给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。
2024-02-22 14:32:18
428
原创 代码随想录算法训练营第五十天 | 70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数
题目要求的是凑成对应总金额最少的硬币个数,所以dp[i]就表示凑成容量i的最少的硬币个数,递推公式就是取可能凑出当前容量的硬币数量的最小值,要考虑的有两种情况,一种是原来就推出来的dp[j],另一种是遍历到了当前物品,那么把当前物品算进来,dp[j-i]个硬币加上当前这一个硬币凑出容量j,这两种情况取小值存起来。然后考虑一下初始化问题,因为是取最小值,所以都初始化为INT_MAX,但是又要考虑到第一个有效数值从哪里获取,那就是dp[0]=0,然后第一个硬币刚好凑出来时就加1存到dp[j]中。
2024-02-22 14:14:56
940
原创 代码随想录算法训练营第四十四天 | 518. 零钱兑换 II、377. 组合总和 Ⅳ
题目中求的是组合数,所以dp[i]的含义就是刚好填满容量i的硬币组合数,所以递推公式是累加,由于求组合不是排列,所以遍历顺序是先物品后背包,注意初始化过程不能直接={0},dp[0] = 1。数字可以无限次使用,所以是完全背包问题,其余和上一道题目一样,唯一区别是求排列,遍历顺序需要先背包后物品,然后在递推公式处需要一个额外的判断条件防止无效的遍历,还有就是leetcode测试数据里有求和大于INT_MAX的情况,所以也要加到判断条件里去。请你计算并返回可以凑成总金额的硬币组合数。
2024-02-17 22:28:05
481
原创 代码随想录算法训练营第四十三天 | 1049. 最后一块石头的重量 II、494. 目标和、474.一和零
今天总结一下昨天的分割等和子集和今天三道题的的思路,都属于01背包问题。其实仔细观察就会发现,这四道题目本质上都是题目提供了一个集合,都需要在集合中选出满足目标的子集,且每个元素只能选一次,所以都是01背包问题。分割等和子集:不需要思路转换;石头:为了得到最小的石头,需要石头相撞,求出一个需要凑的子集,其和尽量接近整个集合求和的一半;目标和:加和减分别是子集,所以也是求子集,满足求和等于目标值;一和零:选字符串集合,尽量多个字符串。
2024-02-07 17:01:48
901
原创 代码随想录算法训练营第四十二天 | 416. 分割等和子集
给你一个 只包含正整数 的 非空 数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
2024-02-06 23:41:28
490
原创 代码随想录算法训练营第四十一天 | 343. 整数拆分、96.不同的二叉搜索树
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。今天的两道题目难度很大。相同特点是需要两层循环,第一层是填写dp数组的循环,第二层是和递推公式相关的。返回 你可以获得的最大乘积。
2024-02-05 14:02:31
421
原创 代码随想录算法训练营第三十九天 | 62.不同路径、 63. 不同路径 II
今天主要的收获就是dp数组扩展到了二维的情况。感觉dp题目的逻辑比前面的还简单。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。
2024-02-04 22:20:46
823
原创 代码随想录算法训练营第三十八天 | 509. 斐波那契数、 70. 爬楼梯、746. 使用最小花费爬楼梯
给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。F(n) = F(n - 1) + F(n - 2),其中 n > 1。每次你可以爬 1 或 2 个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。需要 n 阶你才能到达楼顶。给定 n ,请计算 F(n)。
2024-02-04 00:03:36
405
原创 代码随想录算法训练营第三十七天 | 738.单调递增的数字、 968.监控二叉树
关键思想在于后序遍历二叉树,通过子节点的状态来判断当前节点的状态。还有比较难想的就是怎么划分状态,还有对每种状态的处理方式,直接看讲解还是比较符合思维习惯的,但是自己想不好想,还有最后对根节点无覆盖的处理非常容易忽视,遇到报错有可能会发现。关键思想在于从后向前遍历,遇到需要改的地方后面都需要改为9,所以就只记录最前面需要改的地方即可。当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增。
2024-02-01 14:10:49
415
原创 代码随想录算法训练营第三十六天 | 435. 无重叠区间、763.划分字母区间、56. 合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。今天三道题用了三种不同的细节做法,一个是直接在原数组上更新,第二种是用left right记录,第三种是直接在结果数组上更新。这道题自己想没理清楚,还想着要在原数组上改动还是用left right记录,结果讲解里直接更新结果数组,这种思路明显更符合习惯的思维方式。给你一个字符串 s。
2024-01-31 22:32:06
416
原创 代码随想录算法训练营第三十五天 | 860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球
在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被 引爆。可以射出的弓箭的数量 没有限制。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。说实话,贪心太难总结了,我甚至自己理解了做法都没有办法做总结,只能是多看多练了,目前唯一能做的就是多练几遍,保证完全理解,希望以后再看到类似题目能有印象和经验。
2024-01-30 22:32:50
919
原创 代码随想录算法训练营第三十四天 | 1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果
给定两个整数数组 gas 和 cost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。见注释,思路写的很详细了,把每一步写代码时的思考都写了。见注释,思路写的很详细了,把每一步写代码时的思考都写了。见注释,思路写的很详细了,把每一步写代码时的思考都写了。
2024-01-29 23:28:41
489
原创 代码随想录算法训练营第三十二天 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II
我认为难点就在于对于一些特殊情况和边界条件的考虑,像是提供的数组仅含一个元素的这种特殊情况单独写判断就好了,但是其他的情况中,为了解决特殊情况和写出准确的边界条件往往是杂糅在一起的。我认为解决办法就是一定要先固定一个规则中的意义,否则两头一起考虑问题非常容易乱,这个思想和以前的循环不变量有相似之处,我尽量在后面的记录里指出这个思路的应用方法。数组中的每个元素代表你在该位置可以跳跃的最大长度。见注释,思路写的很详细了,把每一步写代码时的思考都写了。见注释,思路写的很详细了,把每一步写代码时的思考都写了。
2024-01-27 14:09:50
406
原创 代码随想录算法训练营第三十一天 | 455.分发饼干、376. 摆动序列、53. 最大子序和
我们要让首部元素和中间元素一样判断,那么就假设首部前面有一个相等的元素,这时就和第二个问题产生关联了,因为这个时候就出现了相等的元素,于是判断里就变成了preDiff<=0 && curDiff >0 || preDiff>=0 && curDiff<0,这时要在中间元素测试一下看看有什么漏洞,我们会发现当中间元素出现相等时,无非两种情况,最后“摆动”起来了,最后没“摆动”,然后会发现在相等的这个平坡开始处不会记录,同样首部前一个虚拟元素不会被记录;假设你是一位很棒的家长,想要给你的孩子们一些小饼干。
2024-01-27 10:44:20
777
原创 代码随想录算法训练营第二十九天 | 491.非递减子序列、46.全排列、47.全排列 II
这道题目是子集问题,需要startIndex去重,然后给定数组中也有重复元素,所以还需要used数组去重。
2024-01-25 23:38:01
1012
原创 代码随想录算法训练营第二十八天 | 93.复原IP地址、78.子集、90.子集II
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。给你一个整数数组 nums ,数组中的元素 互不相同。给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。
2024-01-24 00:10:44
386
原创 代码随想录算法训练营第二十七天 | 39. 组合总和 、40.组合总和II、131.分割回文串
给的数组有重复元素,每个元素只能用一次,所以递归时要从下一个数字开始尝试加入,另外一定要先排序,因为要去重,排序以后才方便去重,去重的逻辑是:比如[1,1,1,2,3],第一个选1以后,第二个可以选第二个1,也可以选第3个1,但是假如target=4,这样导致递归到[1,1,2]可能是第一个1和第二个1,也可能是第一个1和第三个1,所以递归时再选择第二个数字时要跳过第三个1这种情况,就判断当前层for循环遍历到的数字和前一个数字是否相同,相同跳过。如果至少一个数字的被选数量不同,则两种组合是不同的。
2024-01-23 00:20:03
460
转载 INS 、AHRS、VRU、IMU的概念
AHRS( Attitude and Heading Reference System ):即“航姿参考系统”,AHRS一般由IMU(陀螺、加速度计)和磁力计组成,并增加了计算横滚、俯仰、航向的算法。VRU(Vertical Reference Unit):即“垂直参考单元”,VRU是在IMU传感器的基础上,增加了计算横滚角和俯仰角的算法,VRU也可以提供无参考标准的航向角,航向角一般启动时为0°,随时间的增加,误差累积。现在市场上既有IMU芯片,也有经过阵列排布和标定后的IMU模组。
2024-01-22 16:16:13
203
原创 代码随想录算法训练营第二十五天 | 216.组合总和III、17.电话号码的字母组合
第二个bug是终止条件想复杂了,其实就判断path的长度以及是否满足想要的东西就行了,其他情况怎么递归都无所谓,因为不会加入result。剪枝确实还是不要太好想。而且剪枝似乎有很多可以优化的地方,不能全部都想全,只能把最显而易见的剪枝考虑到,否则可能判断的太多反而不好吧。感觉最近刷题质量细下降了,花的时间也不够多,确实自己写了一遍代码,但是总会写出bug,自己还查不出来,需要gpt协助。感觉最近刷题质量细下降了,花的时间也不够多,确实自己写了一遍代码,但是总会写出bug,自己还查不出来,需要gpt协助。
2024-01-21 10:45:35
512
原创 代码随想录算法训练营第二十四天 | 回溯算法终于开始了!77. 组合
这道题的思路和想象中的回溯有点区别,我以为回溯是可以不需要额外的太多考虑,而只考虑递归即可。但事实上需要自己先做好一些细节处理工作,比如这道题,递归函数的构思是需要计划好的,因为本身并不存在一个树结构,因此在思考解题过程中需要自己给出一个树的结构,比如选了1,剩下的就要从234里选这样。所以我想应该是再考虑用回溯算法解题时,无论如何要先尝试用树结构画出一幅图像然后再思考递归函数的逻辑。另外感觉这个递归函数的设计还是非常灵活的,自己如果有想法还是要自信一点尝试多写写。你可以按 任何顺序 返回答案。
2024-01-19 19:24:53
382
原创 代码随想录算法训练营第二十三天 | 669. 修剪二叉搜索树 、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。改变结构,所以递归函数要返回节点,要接住,遇到超过区域的点整个子树和当前节点都不要,返回另一端子树。所以结果应当返回修剪好的二叉搜索树的新的根节点。只修改节点值,递归不返回节点,记录累加值,从大向小遍历,所以右中左。
2024-01-19 00:13:04
399
原创 代码随想录算法训练营第二十二天 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
这里就体现了上面的总结,插入节点非常简单,遍历到插入位置,新建一个节点即可。
2024-01-17 23:49:08
369
原创 代码随想录算法训练营第二十一天 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
第二种方法是利用二叉搜索树性质,中序遍历就是有序的从小到大,注意处理当前节点时频率的记录和更新,为了判断当前节点值是否等于上一个节点值需要pre指针,如果频率追平最大频率,当前节点值要放入结果数组,如果超过最大频率,要及时清空结果数组,并放入当前节点值,还要记得及时更新pre指针。
2024-01-16 23:40:46
871
原创 代码随想录算法训练营第二十天 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
递归法最简单,递归函数意义就是返回以传入节点为根节点的树是否是有效二叉搜索树,关键点在于要记录当前遍历的最大值,用这个判断当前节点是否大于左子树所有值,因为是中序遍历,左子树先遍历完,会存起来左子树最大值,然后可以判断当前节点,如果不满足直接返回false,注意相等也false,然后再遍历右子树,遍历完都有效就是true。思路:递归法构建,先找到当前数组中最大的数构建当前节点,同时记录下标,然后左侧的数组递归构建当前节点的左子树,右侧数组递归构建当前节点右子树。节点的右子树只包含 大于 当前节点的数。
2024-01-16 00:32:15
1594
原创 代码随想录算法训练营第十八天 | 513.找树左下角的值、112. 路径总和、113. 路径总和Ⅱ、106.从中序与后序遍历序列构造二叉树、105.从前序与中序遍历序列构造二叉树
给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树。给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。
2024-01-14 00:41:56
382
原创 代码随想录算法训练营第十七天 | 110. 平衡二叉树、257. 二叉树的所有路径、404.左叶子之和
肯定是要遍历,那就用递归法,==这里总结一下心得,用递归法深度遍历就要考虑哪种遍历顺序,根据就是要做什么处理,比如这道题,要判断子树的信息,那就是后序遍历。==定义递归函数的意义:返回以传入节点为根节点的树的高度。一个细节就是判断是否为高度平衡二叉树,用-1表示不是,如果子节点不是高度平衡二叉树,那当前的节点也肯定不是了,算是一个小优化。我的理解就是有递归就要有回溯,但是是有前提的,前提就是只有当递归以后改变了传入参数的信息,并且传入参数在本次递归中还需要利用的就需要回溯,也就是把修改的内容去除掉。
2024-01-13 01:08:40
751
原创 代码随想录算法训练营第十六天 | 104.二叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。方案二:递归法,要注意的点比较多,虽然是取最小深度,但是必须是到叶子节点的深度,因此只要当前节点有子节点,就要递归获取,如果有两个子节点,就递归获取到叶子节点深度更小的深度。方案二:递归法,递归获取子树的深度,要注意边界条件的设置,是遍历到空指针返回深度0,然后因为要取最大深度,所以取左右子树中更深的一个,再加上本节点的一层,然后返回结果。这也是本题的考察目的。
2024-01-11 23:51:18
972
原创 代码随想录算法训练营第十五天 |二叉树层序遍历(10道题目)、226.翻转二叉树、101. 对称二叉树
这里我暂时认为就是递归的思路,关键思想在于如何判断轴对称,其实判断轴对称我们应该始终手动提供两侧对应位置的节点(也就是讲解中说的内侧还是外侧,因为是二叉树,所以要么同时提供内侧,要么同时提供外侧),然后递归的结束条件需要仔细考虑一下,注意两侧都为空时返回true,然后处理如果两侧值都相等,如何向下进行递归,递归就是判断下一层的子节点是否还对称,如果都对称,回溯到这一层最终就要返回true。感觉讲解里写的反而有些复杂了,可能出于严谨的考虑。给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
2024-01-10 14:40:10
375
原创 代码随想录算法训练营第十四天 |二叉树理论基础、递归遍历、迭代遍历
然后要注意的就是,我们如何利用栈遍历二叉树,首先栈式先入后出,假设要进行前序遍历,前序遍历式中左右,放入栈里的顺序就要是右左中,然后如何确定要处理节点了呢?我们规定访问节点就是指当前指针走到了这个节点,不做处理操作,处理节点才是把当前指针走到的节点输出(在题目中就是放到结果容器中)。每次循环访问栈顶元素时,如果遇到了空指针就说明要处理节点了,把空指针pop掉,再取栈顶元素,处理一下,再pop掉。我学习中只关注了递归法和统一迭代法,因为我认为不统一的迭代法性价比不高。,这个自己要好好体会。
2024-01-09 13:57:30
489
原创 代码随想录算法训练营第十三天 | 239. 滑动窗口最大值、347.前 K 个高频元素
关于C++中排序和建堆的比较规则:std::greater()、std::less()、自定义比较规则,感兴趣的读者可以看一下,自己理解一遍下次复习看自己的博客会更快复习完。
2024-01-08 19:41:02
894
原创 关于C++中排序和建堆的比较规则:std::greater()、std::less()、自定义比较规则
在C++中,排序和建堆的比较规则是通过比较函数或者比较对象来定义的。这通常涉及到使用函数对象(Functor)或者函数指针,以决定元素之间的大小关系。利用函数排序// 自定义比较函数// 降序排序// 使用自定义比较函数进行降序排序// 输出排序后的结果return 0;利用对象排序,注意sort第三个实参中有括号,是建立临时对象// 自定义比较对象// 降序排序// 使用自定义比较对象进行降序排序// 输出排序后的结果return 0;
2024-01-08 17:23:52
1105
原创 代码随想录算法训练营第十一天 | 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值
思路就是遇到数字就放入栈中,遇到运算符就把前面两个数字取出来运算再放入栈中,==要注意两个数字的前后顺序,==还有就是这道题目里说了32位表达,但是讲解里说leetcode后台改了数据,要用long long,据我所知long long是有符号64位整数,然后注意数字放入栈中要把字符串转化为long long再放入,用stoll()函数,最后的结果是long long赋值给int,这里不知道为什么不存在潜在问题。输入:tokens = [“10”,“6”,“9”,“3”,“+”,“-11”,“
2024-01-06 11:18:08
849
原创 代码随想录算法训练营第十天 | 232.用栈实现队列、225. 用队列实现栈
这道题目要求用队列实现栈,我们不必再用两个队列,因为队列和栈无非就是入栈和出栈的顺序不同,只要仔细思考一下就会发现,入栈操作,我们就向队列中push即可,出栈时为了让最后进入队列的元素出去,我们不得不把队列前面的元素都pop掉,但是不能实际扔掉前面的值,于是我们就把前面的值再放到队列末尾即可。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
2024-01-05 20:25:05
1667
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人