自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode 热题100(十七)【技巧】

给你一个整数数组nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。14nums = [1]1利用异或的性质:a^0 = a, a^a = 0, a^b^a = b无。

2024-12-06 13:46:31 769

原创 LeetCode 热题100(十六)【多维动态规划】

一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?283从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向下 -> 向下2. 向下 -> 向下 -> 向右3. 向下 -> 向右 -> 向下2861.dp[i][j]表示到达第i行第j列位置的路径数2.对第一行和第一列的dp都初始化为1。

2024-12-06 11:48:28 1282

原创 LeetCode 热题100(十五)【动态规划】(3)

当s[i]==')',s[i - 1]==')'时,如果s[i - 1 - dp[i - 1]]=='(',dp[i] = dp[i - 1] + 2 + dp[i - 2 - dp[i - 1]]dp[j] = dp[j] || dp[j - nums[i]],其中j∈[ nums[i], target ]2.当s[i]==')',s[i - 1]=='('时,dp[i]=dp[i - 2] + 2;2.当nums[i] > nums[j]时,dp[i] = dp[j] + 1。

2024-12-05 16:16:13 1336

原创 LeetCode 热题100(十五)【动态规划】(2)

返回 true 因为 "applepenapple" 可以由 "apple" "pen" "apple" 拼接成。如果dp[j] == true同时[j, i - j]范围内的字符串与字典中的单词相同,则更新dp[i]为true。返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。1.dp[i]表示前i个字符是否可以用字典中的单词拼接成(用bool值表示)不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。1.dp[i]表示和为i的完全平方数的最少数量。

2024-12-05 16:01:38 1108

原创 LeetCode 热题100(十五)【动态规划】(1)

假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?n = 22有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶n = 33有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶1.dp[i]表示爬上第i阶楼梯的方法数2.初始化dp[0]和dp[1]3.从i=2开始遍历更新dp4.返回dp[n]无。

2024-12-04 09:15:13 778

原创 LeetCode 热题100(十四)【贪心算法】

给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择买入这只股票,并选择在卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回0。5在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。0。

2024-12-02 11:38:23 1104

原创 LeetCode 热题100(十三)【堆】(待更新)

给定整数数组nums和整数k,请返回数组中第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。你必须设计并实现时间复杂度为O(n)的算法解决此问题。54。

2024-12-02 11:32:32 887

原创 LeetCode 热题100(十二)【栈】

给定一个只包括'('')''{''}''['']'的字符串s,判断字符串是否有效。s = "()"truetrues = "(]"falses = "([])"true1.建立栈stack<string> st2.如果当前字符串为左括号时,压入栈中3.如果当前字符串为右括号时,且栈顶为与其相匹配的右括号,则将栈顶元素弹出4.最后返回st.empty()(如果字符串是有效的话,栈内的左括号应该刚好全部弹出了)无。

2024-11-28 09:06:50 1033

原创 LeetCode 热题100(十一)【二分查找】(2)

当[l, mid - 1]为升序区间时,若nums[l]

2024-11-26 10:07:32 715

原创 LeetCode 热题100(十一)【二分查找】(1)

leetcode链接 34. 在排序数组中查找元素的第一个和最后一个位置给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。示例 1:[3,4]示例 2:[-1,-1]示例 3:[-1,-1]1.构造lower函数,int lower (vector<int>& nums, int target)

2024-11-24 10:32:07 1023

原创 LeetCode 热题100(十)【回溯】(2)

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。1.1判断在(0,0)处能否放皇后(该列、45度对角线、135度对角线是否已经存在皇后)按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且。若能放,跳转至下一行,进行同样的操作,直至超出棋盘的行数。1.2重复1.1的操作,判断在(0,1)处能否放皇后。1.3重复1.1的操作,判断在(0,2)处能否放皇后。

2024-11-22 11:02:32 564

原创 LeetCode 热题100(十)【回溯】(1)

1.由于全排列问题需要考虑排列的顺序,因此使用vector<bool> used(nums.size(), false)来表示某一个元素是否已经使用过,用vector<int> path来存储某一个满足条件的排列,用vector<vector<int>> ans来存储最后的返回结果。回溯问题一般都包含如下三个步骤,模版如下,后续的回溯问题都是按照这样的大框架来完成,所以掌握了回溯问题的模版再针对具体问题进行分析,差不多就能解决这一类的问题了。如果至少一个数字的被选数量不同,则两种组合是不同的。

2024-11-20 10:04:27 855

原创 LeetCode 热题100(九)【图论】(待更新)

1.利用bfs遍历,当grid[i][j] == 1,令grid[i][j] == 0,再向上下左右四个方向搜索(i-1,j)(i+1,j)(i,j-1)(i,j+1),如果超出地图边界或者等于0直接返回,等于1的情况则令其为0后再向四个方向搜索。-1 : time,这表示如果到最后fresh>0,意味着还存在新鲜橘子,返回-1,否则返回全部腐烂所需的分钟数。并且学习课程 0 之前,你还应先完成课程 1。时间time++,腐烂橘子向四周蔓延,每感染一个新鲜橘子,存储该橘子坐标,标记为2,fresh--

2024-11-18 14:24:58 825

原创 LeetCode 热题100(八)【二叉树】(3)

1.由于前序遍历的顺序是【根-左子树-右子树】,中序遍历的顺序是【左子树-根-右子树】,所以由上图的前序遍历preorder可知,它的第一个元素3为根节点。中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。节点5和节点4的最近公共祖先是节点5。记录3的右子树的前序遍历顺序和中序遍历顺序,其中20即为3的右节点。

2024-11-14 14:44:01 978

原创 LeetCode 热题100(八)【二叉树】(2)

对于任意一个节点A而言,令L表示节点A左子树的最大深度,R表示节点A右子树的最大深度,则以节点A为根节点的最大直径为L+R。以下图所示,对于节点2而言,L=2,R=3,以节点2为根节点的最大直径为5。二叉树的最大直径是指树中两个节点所能形成的最长路径(不一定会经过根节点),若该最长路径经过N个节点,则二叉树的最大直径为N-1。将有序数组中最中间的元素作为二叉搜索树的根节点,小于中间元素的放入左子树中,大于中间元素的放入右子树中。3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。

2024-11-12 08:57:53 848

原创 LeetCode 热题100(八)【二叉树】(1)

二叉树的遍历分为前序遍历、中序遍历、后序遍历,前、中、后是指对根节点的遍历顺序。5.l、r均不为空,l -> val == r -> val,继续比较l -> left和r -> right以及l -> right和r -> left。二叉树的层序遍历是二叉树中必须掌握的,至少有十个题目的题解是建立在二叉树的层序遍历基础之上的。3.根节点出队的同时,将根节点的左、右节点入队,并且将第一层节点存入result中。4.第二层节点出队的同时,将第三层节点入队,并且将第二层节点存入result中。

2024-11-10 15:32:45 1117 1

原创 LeetCode 热题100(七)【链表】(3)(待更新)

给ccc给ccc给ccc给ccc。

2024-11-08 11:15:58 321

原创 LeetCode 热题100(七)【链表】(2)

如果list1 -> val > list2 -> val,则list2 -> next = mergeTwoLists(list1, list2 -> next);给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。4.令slow -> next = slow -> next -> next,返回dummy -> next。2.当list1、list2均为非空链表,比较list1 -> val和list2 -> val的大小。新链表是通过拼接给定的两个链表的所有节点组成的。

2024-11-06 09:01:38 1677

原创 LeetCode 热题100(七)【链表】(1)

的输入如下(你设计的程序。

2024-11-04 10:38:25 1190

原创 LeetCode 热题100(六)【矩阵】

5.请注意在第3、4步中,均多加了一个判断,这是因为当遍历n圈后(n>=0),如果矩阵内剩下的元素是一个行向量或者列向量,最后的输出结果会有问题,请自己推导一下第3、4步中不多加一个判断,对于以下几个矩阵,输出是否会正确。矩阵的左、右、上、下边界分别为left、right、top、bottom,只要满足left <= right && top <= bottom即可进行遍历。3.从右往左遍历,遍历完之后,bottom--2.从上往下遍历,遍历完之后,right--1.从左往右遍历,遍历完之后,top++

2024-11-03 09:11:04 959

原创 LeetCode 热题100(五)【普通数组】

4.若result.back()[1] >= intervals[i][0] ,则说明存在重叠区间,result.back()[1] = max (result.back()[1], intervals[i][1]);1.建立dp数组vector<int> dp(n, 0),dp[i]表示以nums[i]结尾的最大子数组和,因此max(dp[0],...,dp[n-1])即为我们所求的答案。如nums=[1,2,3,5,4],返回6。以[[1,3],[8,10],[2,6],[15,18]]为例。

2024-10-31 09:13:28 1133

原创 LeetCode 热题100(四)【子串】

4.right遍历结束,如果ans_left

2024-10-29 09:15:24 1301

原创 LeetCode 热题100(三)【滑动窗口】

2.对于s的第一个字符,将s中[0, m-1]之间的元素存入vector s_count(26)中,若p_count==s_count,ans.push_back(0)起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。的子串,返回这些子串的起始索引。因为无重复字符的最长子串是。

2024-10-28 10:12:33 956

原创 LeetCode 热题100(二)【双指针】

4.如果nums[i] == nums[i - 1],意味着在nums[i-1]时已经对left和right遍历过了,如果再对nums[i]遍历,就会出现重复组合,因此直接跳过这种情况。2.i=0时,nums[0]=-4<0,不返回,left=1,right=5,left<right,nums[left]=-1,nums[right]=2,5.令left = i + 1,right = nums.size() - 1,计算nums[i] + nums[left] + nums[right]

2024-10-25 09:06:52 1245

原创 LeetCode 热题100(一)【哈希】

例如对于单词“eat”,“tea”,“ate”,对其进行排序后,均为“aet”,令MyMap的key为aet,则有MyMap[aet] = {“eat”,“tea”,“ate”};2.对于100来说,num_set中不存在99,则100为连续序列的起始数,当前序列数为1,在num_set寻找是否存在101,不存在,当前最大序列数为1。4.对于200,num_set中不存在199,则200为连续序列的起始数,当前序列数为1,在num_set寻找是否存在201,不存在,当前最大序列数为1。

2024-10-23 10:39:18 1067

原创 【自动驾驶】自动紧急制动(AEB)的控制策略、测试及评价

Autonomous Emergency Breaking,自动紧急制动:Forward Collision Warning,前向碰撞预警:Time To Collision ,碰撞时间:China New Car Assessment Program,中国新车评价规程:European New Car Assessment Program,欧洲新车评价规程:Car to Car Stationary,前车静止:Car to Car Moving,前车慢行:Car to Car Braking,前车制动。

2024-09-12 14:46:05 6426

原创 基于Matlab/Simulink、CarSim、PreScan的联合仿真

点击Send to Simulink按钮(当在CarSim中进行修改后,也需要点击该按钮),工作目录下生成simfile.sim文件,同时在simulink中会新打开一个页面包含CarSim S-Function模块,即可表明Matlab/Simulink与CarSim连通成功。由于PreScan中Lane Marker传感器的精度以及在拟合时使用的拟合点较少,使得拟合得到的车道线参数呈现小幅的周期波动,从而造成车辆与车道中心线之间的距离误差呈现小幅的周期波动,后续对感知信息的处理可以再进一步优化。

2024-09-05 16:42:00 3064 1

原创 基于车辆动力学模型的自动驾驶车辆横向控制

分别为横向距离误差、横向距离误差变化率、航向角误差、航向角误差变化率,将式(2-3)写成式(2-4)的形式,此即为横向误差控制模型。(2)忽略悬架的作用,车身只做平行于地面的平面运动,即忽略沿z轴的垂向运动、绕y轴的俯仰运动以及绕x轴的侧倾运动;因此为消除稳态误差带来的影响,考虑在反馈控制的基础上加入前馈控制,引入前馈值。但是在第二节中推导得到的式(2-4)横向误差控制模型中,多了一部分。(5)驱动力不大,不考虑地面切向力对轮胎侧偏特性的影响,没有空气动力的作用;在式(1-4)的基础上, 令航向角误差。

2024-09-05 16:32:38 2738

原创 自动驾驶车道线拟合

假设采用n次多项式对m个采样点进行最小二乘法拟合,分别为m个采样点的坐标,根据这m个采样点拟合的n次多项式为我们的目的是通过m个采用点的坐标数据,求得n次多项式中的系数,即。

2024-09-05 11:25:44 595

原创 ubuntu中使用vscode 无法找到Python.h头文件

在Ubuntu vscode 中使用cmake进行项目构建时,执行cmake ..指令时未报错,执行make指令后报错,报错信息如下,表明无法找到Python.h头文件。python.h的存放位置为/usr/include/python x.x(x.x表示你安装的对应版本)2.2输入C/C++,打开JSON配置文件。1.检查是否安装Python库。2.1按F1启动指令输入框。2.尝试配置头文件路径。

2024-08-23 15:51:19 868

原创 EM Planner和Lattice Planner对比

已知起始状态,对末状态进行采样。

2024-08-22 17:22:33 1247

原创 Cmake基础知识及项目构建

Cmake是一个跨平台的项目构建工具,能够自动化生成本地化的Makefile和工程文件,最后通过make编译即可,因此可以将Cmake看成是一款自动生成Makefile的工具。图1-1 编译流程蓝色虚线表示使用makefile构建项目的过程红色实线表示使用cmake构建项目的过程跨平台能够管理大型项目简化编译构建过程和编译过程可扩展:可以为 cmake 编写特定功能的模块,扩充 cmake 功能EXECUTABLE_OUTPUT_PATH:可执行程序存放位置,放在bin文件夹中。

2024-08-15 11:20:54 413

原创 Linux下基于vscode和Cmake的C++开发

以自动驾驶中的横向控制为例,对Linux下基于vscode和Cmake的C++开发进行说明。

2024-08-14 17:33:18 177

原创 卡尔曼滤波的具体推导过程

卡尔曼滤波器通过将多个传感器或测量器的数据进行融合,利用概率论和线性系统理论对状态进行估计和预测,从而有效地解决了不确定性带来的问题。它能够根据先验知识和测量信息来递归地更新状态估计,并提供对未来状态的最优预测。

2024-08-14 17:31:54 236

原创 C++面向对象基础知识

struct和class的区别在于默认访问权限不同,class中通过将成员属性设置为私有,可自己控制读写权限,保证数据的隐私与安全。C++程序在执行时,将数据存放在不同的区域,赋予其不同的生命周期,给编程以更多的灵活性。人可以作为对象,属性有姓名、年龄、身高、体重…,行为有走、跑、跳、吃饭、唱歌…​ 车也可以作为对象,属性有轮胎、方向盘、车灯…引用的本质是一个指针常量(即该指针是一个常量,指针所指向的值可以更改)​ 具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类。

2024-08-13 15:56:06 920

原创 自动驾驶LQR横向控制算法C++实现

getState状态量获取==>calcTrackError计算跟踪误差==>stateSpace离散化==>lqrControl计算前轮转角==>updateState状态量更新==>画图==>循环。compute_state_derivative:计算得到state_dot。GenerateStateSpace:得到横向误差模型中的A、B、C矩阵。DiscreteStateSpace:离散化得到A_bar, B_bar。stateSpace:模型离散化后得到A、B矩阵。getState:状态量获取。

2024-08-13 10:56:24 1422

原创 Ling的个人记录汇总

1.自动驾驶控制算法1.1车辆运动学模型1.2车辆动力学模型1.3车辆横向误差模型1.4LQR前馈+反馈1.5Carsim/Simulink/Prescan联合仿真2.控制算法C++开发2.1C++基础2.2基于vscode和Cmake的C++开发2.3Linux下C++横向控制算法开发3.自动驾驶相关基础知识3.1卡尔曼滤波3.2矩阵求导4.自动驾驶测试5.基于视觉的车道线识别5.1传统方法5.2深度学习方法6.读书6.1书单6.

2024-08-12 16:12:47 150

空空如也

空空如也

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

TA关注的人

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