- 博客(152)
- 资源 (2)
- 收藏
- 关注
原创 git学习笔记-基础
本文内容参考自廖雪峰老师系列博客,主要记录Ubuntu 18.04 下git的配置过程和基本使用。一、什么是GitGit是一个文件版本控制系统,能方便的让我们对文件版本进行更新,回退,合并等操作。我们可以利用Git来为我们的项目文件创建一个版本库, 又名仓库,英文名repository,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。当我们安装了Git之后,我们就可以在自己的电脑上创
2022-02-11 19:49:28
1119
1
原创 CLion编译ROS工程:以Lego-LOAM为例
在使用CLion编译ROS工程的时候,如果直接使用CLion打开ROS工程会出现环境配置问题,本文以Lego-LOAM为例记录如何使用CLion编译ROS工程一、使用ROS工程环境运行CLion为了使得CLion能够知晓当前ROS工程所使用的环境,我们应该在ROS工程环境下使用命令行打开CLlion#进入ROS工程文件夹并激活环境cd LeGO-LOAM-ZM/source devel/setup.bash #在当前环境中进入clion文件夹并使用命令行运行clioncdcd clion-2
2022-02-11 19:48:33
2239
原创 AirSim配置文件front_stereo_and_center_mono解析
以下是AirSim配置文件front_stereo_and_center_mono.json文件全文及其注释{ #SeeDocsAt参数用于提示官方文档地址 "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md", #SettingsVersion该参数用于指出settings.json文件版本 "SettingsVersion": 1.2, #SimMode参数用于指定仿真模式,“
2022-02-11 19:28:20
1260
原创 Ubuntu18.04搭建AirSim+ROS仿真环境
AIRSIM在UBuntu 18.04上构建的官网文档一、安装UE4引擎AIRSIM是依赖于UE4引擎实现的,因此在安装AIRSIM之前要安装UE4引擎。1、获取UE4的github许可在Ubuntu上安装UE4引擎需要从源文件进行编译,因此我们需要访问UE4的github仓库。但想要访问UE4的github仓库,我们就必须建立github与UE4许可的链接,否则直接访问UE4的github仓库时就会404 Not Found。首先在虚幻4官网注册账号,注册好账号之后进入个人/CONNECTION
2021-12-29 15:20:35
9162
12
原创 SENSORS期刊调研2021-12-14
本文记录针对SENSORS期刊及其特刊UAV_based_sensors的调研结果,截止日期为2021年12月14日一、UAV_based_sensors特刊调研结果该特刊为OA期刊(开源期刊)SENSORS发布的特刊,期刊主题是收集无人机应用传感器及传感器系统研究文章和评论,征集主题包括:无人机电子仪表,无人机自动测试设备,无人机传感器系统,无人机传感器通信网络无人机导航系统,无人机监控系统,无人机数据融合技术,航空测绘无人机集群,无人机农业,无人机搜救,无人机安防特刊编辑:Dr. F
2021-12-14 23:00:56
4445
1
原创 WIN10下Markdowm环境配置
一、配置介绍配置说明:将Typora作为主要的md文件编写工具,使用坚果云进行云端同步;为Typora配置gitee图床,完成稿发布到优快云。其中上传图片到图床和发布到优快云需要人工操作。该配置有一下几点好处:对于md草稿文件,可以实现本地和坚果云双端存储对于md完成稿文件,可以实现本地,坚果云,优快云三端存储对于图片,由于优快云可以自动将gitee图床连接解析为优快云连接,因此可以实现本地,坚果云,优快云,gitee四端存储二、坚果云配置这一步主要是使用坚果云配置一个同步文
2021-12-13 13:31:40
772
原创 动态规划:基础与路径问题
一、动态规划与贪心的区别动态规划(Dynamic Programming),使用解决具有很多重叠子问题的问题。动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的二、动态规划解题步骤确定dp数组(dp table)以及下标的含义确定递推公式(有时候是递推公式决定了dp数组如何初始化)dp数组如何初始化确定遍历顺序举例推导dp数组注意:对于递推数组初始化部分,我们要直接返回,以防止初始化部分越界。如一个dp数组要从[0]初始化到[m
2021-08-26 22:20:01
328
原创 动态规划:打家劫舍&买卖股票
一、打家劫舍1、基础打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组nums,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。1)dp数组含义dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i]2)递推公式对于第i间房屋,可以分为两种情况:不偷第i间房屋:dp[i
2021-08-26 22:18:54
206
原创 动态规划:字符串系列
当遇见两个字符串s,t的动态规划问题时候,通常使用二维数组表示分别取两个字符串中的第i个元素和第j个元素,并根据s[i] == t[j]来选择不同的递推公式一、动态规划:子序列1、最长递增子序列(非连续)最长递增子序列给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组[0,3,1,6,2,2,7] 的子序列。1)dp数组dp[i]为以元素nums[i]结尾的最
2021-08-26 21:51:46
1851
原创 C++理论(五):语言特性
一、左值和右值的区别?左值引用和右值引用的区别,如何将左值转换成右值?左值当一个对象作为左值的时候,使用的是对象的身份,即对象在内存中的地址右值当一个对象作为右值的时候,使用的是对象的值左值引用和右值引用的区别如何将左值转化为右值二、std::move()函数的实现原理三、什么是指针?指针的大小及用法?指针指向另外一种类型的复合类型。指针的大小在 64 位计算机中,指针占 8 个字节空间。指针的用法四、什么是野指针和悬空指针?野指针“野指针”是指不确定其指向的指针,未初始化的
2021-08-13 16:45:26
563
原创 LK光流法与反向LK光流法
文章目录一、基本概念二、LK光流法1、空间点在图像中的灰度表示一、基本概念光流法:光流法是一种描述像素随时间在图像之间运动的方法稀疏光流法:计算部分像素运动的称为稀疏光流法,以 Lucas-Kanade 光流为代表稠密光流法:计算所有像素的称为稠密光流法,以 Hom-Schunck 光流为代表灰度不变假设:同一个空间点的像素灰度值,在各个图像中是固定不变的。这是光流法的基本假设,同时也是一个很强的假设,在现实中很难得到保证;因此光流法得出的结果可能存在偏差二、LK光流法1、空间点在图像中的灰度
2021-07-19 17:42:33
4942
3
原创 在线编程常见输入输出
一、多组等长数据输入题目:输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据包括多组。输出a+b的结果。解决方案:使用iostream头文件和std命名空间使用while(cin >> a >> b)来依次读取多组输入,这里注意a和b需要提前定义输入输出例子//输入1 510 20//输出630解题代码#include <iostream>using namespace std;int main(){
2021-07-17 23:49:12
1249
1
原创 MarkDownPad2 Pro安装
一、注册安装2021/07/15亲测可行前往官网下载免费版本:https://markdownpad.com/正常安装在免费版本中升级为Pro版本,注册信息如下邮箱Soar360@live.com注册码GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6xhMNLGVpbP2M5SN6bnxn2kSE8qHqNY5QaaRxmO3YSMHxlv2EYpjdwLcPwfeTG7kUdnhKE0vVy4RidP6Y2wZ0q74f
2021-07-15 09:05:04
698
原创 算法范本:链表
一、链表基础链表的基础操作包括链表的创建和增删查改。其中链表的索引index一般从0开始。这里有以下几点需要注意:链表是一个类,节点结构体是类中的一个私有结构体对于一个链表,其私有数据需要包括节点结构体,虚拟头结点,节点数量对于节点结构体,需要在定义结构体的时候需要定义构造函数,且不要忘记结构体定义最后的;号对于链表,需要在public中定义链表的初始化构造函数class MyLinkedList {private: /---链表依赖的基础结构:节点,节点数量,虚拟头结点---/
2021-07-09 16:00:24
651
原创 那些见过才会的题目
11. 盛最多水的容器给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。这道题应该使用双指针方法来做,初始化左右指针分别指向数组的左右两端,指针移动规则为:如果左指针元素小于右指针元素,则左指针向右移动如果右指针元素小于左指针元素,则右指针向左移动记录指针遍历过程中全部容量,选择其中最大的最最
2021-07-09 13:03:20
150
2
原创 算法范本:旋转矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。其核心问题在于:遍历多少圈:(min(m, n) + 1) / 2最后一个数如何处理:特殊处理什么时候遍历完成:必须实时判定,以防最后一圈遍历两次class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { //空矩阵处理,一定先判定m
2021-07-08 17:26:36
270
原创 算法范本:滑动窗口
滑动窗口算法可以用于位于一个符合题意的子序列,在O(n)时间复杂下完成序列的子序列查找。一、滑动窗口滑动窗口的思想核心是先移动窗口终止位置扩张窗口;当扩张后的窗口不符合要求时,移动窗口其实位置缩小窗口,从而找到符合条件的窗口。其中要求:当窗口为空时,必须能够满足要求,否则窗口的起始位置就会超越终止位置int start = 0, end = 0, len = 0, res = INT32_MAX, sum = 0;/---窗口终止位置移动---/for(end; end < nums.
2021-07-08 17:03:14
231
原创 数组(一):二分法
二分法是在排序后的数组中查找给定值,从而将O(n)的查找复杂度降低为O(logn)。根据条件的不同,二分法共有四种情况:在非重复数组中可以找到给定值在重复数组中可以找到给定值在非重复数组中无法找到给定值在重复数组中无法找到给定值一、非重复数组中可以找到给定值(初始模板)使用双闭环区间来进行二分查找,这里一共有两个注意点:查找退出条件为left <= right中间值计算使用left + (right - left) / 2,放置计算left + right发生越界class
2021-07-08 16:13:18
581
原创 链表习题汇总
2. 两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。联系链表操作,关键是别忘了进位class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* cur1 = l1;
2021-07-07 18:07:36
143
原创 动态规划(十):其他题目
647. 回文子串给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。注意:回文子串是要求连续的1、dp数组布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。2、递推公式想要等到dp[i][j],整体上是两种,就是s[i]与s[j]相等,s[i]与s[j]不相等这两种。当s[i]与s[j]不相等,那没啥好说的
2021-07-06 19:18:26
199
2
原创 动态规划(八):子序列系列
一、最长递增子序列(非连续)300. 最长递增子序列给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。1、dp数组dp[i]为以元素nums[i]结尾的最长递增子序列。2、递推公式位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 + 1 的最大值。 for(int j = i -
2021-07-06 11:02:53
1165
1
原创 动态规划(七):买卖股票发大财
一、买卖股票(单次买卖,持有一支)121. 买卖股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。1、dp数组含义我们使用二维数组记录第i天的两种状态dp[i][0]:第i天不持有股票手中的现金dp[i][1]:第i天持有股票手
2021-07-05 16:57:35
326
原创 动态规划(六):打家劫舍
一、打家劫舍基础题198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组nums,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。1、dp数组含义dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i]2、递推公式对于第i间房屋,可以分为两种情况:不偷第i间房屋:d
2021-07-05 10:10:42
432
原创 动态规划(五):多重背包问题
一、多重背包问题背包问题为有N种物品和一个最多能被重量为W 的背包。第i件物品的重量是weight[i],数量为Mi,得到的价值是value[i] ,没件物品只能使用一次,将这些物品装进背包,怎么装价值最高。二、多重背包问题的解法我们注意到01背包并没有要求物品不一样,因此我么可以把多重背包摊开,把Mi件第i中物品视作Mi种物品,没种只有一个,这就转换成一个01背包问题,具体的转化方式有两种1、显示摊开void test_multi_pack() { vector<int> w
2021-07-03 08:20:43
1440
原创 动态规划(三):01背包问题
一、背包问题概述背包问题为有N件物品和一个最多能被重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。将这些物品装进背包,怎么装价值最高。 根据条件不同,可以分为以下几类:01背包:每件物品只有一个,要不拿一个,要不不拿完全背包:每件物品有无数个,可以拿0-任意个多重背包:不同物品数量不同分组背包:多种物品组成一个小组,每组只能拿一种组合背包:01背包,完全背包与多重背包的组合体leetcode上学会01背包,完全背包和多种背包足够了,因此这里只讲这三种
2021-06-30 15:56:21
1041
1
原创 贪心算法(二):复杂例题
135. 分发糖果老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?1、贪心策略本题目需要使用两次贪心策略,首先给每个孩子发一个糖果,然后:第一次是从左边往右边贪心:只要右边评分比左边大,右边的孩子就多一个糖果第二次是右边往左边贪心:只要左边比右边大,左边的孩子得
2021-06-28 15:32:54
579
原创 容器相关内容
一、相关函数1、sort函数sort函数的默认排序按照容器内元素的<符号排序,小的元素排在前面vector<int> Vec;sort(Vec.begin(), Vec.end());sort函数的自定义排序自定义针对X类型元素的排序函数cmp,然后使用cmp对包含X元素的容器排序,排序结果使得cmp(前面的元素, 后面的元素)返回truestatic bool cmp(X a, Xb){ ...}vector<X> Vec;sort(Vec.begi
2021-06-28 10:48:24
118
原创 回溯算法(六):N皇后问题
51. N 皇后n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。一、解题思路首先我们写一个函数,来判定在某个格子上放置皇后是否合法对于棋盘,按层向下每层放置一个皇后如果能够放到最后,就可以得到一个可行解其实这就是一个回溯问题,只不过路径选择的合法性更复杂一些二、代
2021-06-26 13:36:37
1083
原创 回溯问题(四):子集问题
78. 子集给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。子集问题的特点组合问题与分割问题是将递归到最底层的路径作为结果子集问题的特点是需要将递归路上的全部路径作为结果因此,对于子集问题,我们对结果的记录发生在每次递归的最开始,而不是终止条件内2、代码实现class Solution {private: vector<vector<int>> res
2021-06-25 22:41:01
133
1
原创 回溯问题(三):切割问题
131. 分割回文串 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。1、切割问题抽象化因此,切割问题中需要递归传递的也只有一个参数:当前应该从哪里继续切割2、代码实现class Solution { vector<vector<string>> res; vector<string> path; /-----递归函数-----/ v
2021-06-25 21:36:10
643
原创 C++基础:字符串
string类型的成员函数对于string s,其具有如下成员函数1、s.substr()成员函数格式:s.substr(int begIndex, int length)成员函数作用:返回一个从字符串s的begIndex下标开始(包括该下标对应的元素),长度为length的字符串注意事项length参数可以省略,当该参数省略或者给定的length超过字符串s的范围时候,函数返回从startIndex到s串尾的拷贝begIndex可以和length参数被一起省略,但不能被单独省略;当一起
2021-06-25 20:22:53
122
原创 回溯问题(二):组合和问题及回溯问题的横向去重和纵向去重
组合总和给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。1、问题抽象与代码实现1)问题抽象2)代码实现class Solution {private: vector<vector<int>> result; vector<int> path; void backtracki..
2021-06-25 15:48:03
373
1
原创 回溯算法(一):组合问题
77.组合给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。这就是个暴力搜索的问题,但是如果k=50,我们就要写50层循环,这是不现实的。回溯算法就是将k层for循环转换成k层递归深度,从而让我们可以把代码写出来。1、问题抽象与代码实现1)将该问题抽象为树形结构:2)代码实现class Solution {private:/-----回溯算法-----/ vector<vector<int>> res; //用于存放总结果 .
2021-06-25 13:12:41
1277
1
原创 排序算法:习题篇
剑指 Offer 45. 把数组排成最小的数输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。1、思路此题求拼接起来的最小数字,本质上是一个排序问题。设数组 numsnums 中任意两数字的字符串为 x 和 y ,则规定排序判断规则为:若拼接字符串 x + y > y + x ,则 x “大于” y ;反之,若 x + y < y + x ,则 x “小于” y ;x “小于” y 代表:排序完成后,数组中 x 应在 y 左边;“大于.
2021-06-24 23:53:05
533
原创 排序算法(三):时间复杂度O(n)的排序算法
O(n) 级的排序算法存在已久,但他们只能用于特定的场景一、计数排序计数排序限制:举个例子,我们需要对一列数组排序,这个数组中每个元素都是 [1, 9]区间内的整数。那么我们可以构建一个长度为 9 的数组用于计数,计数数组的下标分别对应区间内的 9 个整数。然后遍历待排序的数组,将区间内每个整数出现的次数统计到计数数组中对应下标的位置。最后遍历计数数组,将每个元素输出,输出的次数就是对应位置记录的次数。计数排序限制:数据需要分布在一定的范围内1、算法步骤举个例子,班上有 1010 名同学:他们的
2021-06-24 16:38:23
6206
原创 排序算法(二):时间复杂度为O(nlogn)的排序算法
一、希尔排序(实际上很少用到,了解即可)1、算法步骤将待排序数组按照一定的间隔进行排序,如此时排序间隔为gap:则从index=gap处的元素开始排序;对于index = i的元素,每次和当前index - gap处的元素进行比较,直到符合插入条件;然后继续比较index = i++的元素,直到数组末尾,完成当前间隔的排序逐渐缩小间隔进行下一轮排序最后一轮时,取间隔为 1,也就相当于直接使用插入排序。但这时经过前面的「宏观调控」,数组已经基本有序了,所以此时的插入排序只需进行少量交换便可完成
2021-06-24 13:06:24
9053
1
原创 排序算法(一):时间复杂度为O(n^2)的排序算法
零、基本概念1、排序算法的稳定性假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i] = r[j],且r[i]在 r[j] 之前,而在排序后的序列中,r[i]仍在 r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。一、冒泡排序1、算法步骤比较相邻的元素。如果第一个比第二个大,就交换他们两个。(内层循环)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数(外层循环)
2021-06-23 00:34:00
1765
1
pcltext.tar.gz修复版
2020-04-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人