自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 资源 (1)
  • 收藏
  • 关注

原创 [K210开发笔记]Linux环境下K210开发流程总结

在Linux环境下,通过终端进入 kendryte-standalone-sdk-develop 文件目录,在该目录下输入 code . 打开vscode。打开vscode后,便可直接进入 kendryte-standalone-sdk-develop 文件目录,在该目录的src文件中编写源代码,在build文件中保存cmake编译产生的文件,也是我们最后要得到的烧录固件的保存路径。 写完程序后,进入build目录,执行以下操作:1)CMake生成Makefilecmake .. -

2021-12-30 23:25:57 1766

原创 [LeetCode] 530.二叉搜索树的最小绝对差

LeetCode 530.二叉搜索树的最小绝对差思路二叉搜索树的重要特性就是有序性,通过中序遍历得到的数组是一个递增的数组,因此这道题目可以简化为在一个有序数组上求两个数的最小差值。递归法1把二叉搜索树转换成有序数组,然后遍历一遍数组,就统计出来最小差值了。class Solution {private:vector<int> vec;void traversal(TreeNode* root) { if (root == NULL) return; trave

2021-12-27 21:53:06 253

原创 [LeetCode] 98.验证二叉搜索树

LeetCode 98.验证二叉搜索树思路递归法1充分利用二叉搜索树的有序性,采用中序遍历将遍历到的节点值放入数组中,即可得到一个递增的数组,通过判断该数组是否呈现递增趋势,进而得知该二叉树是否为二叉搜索树。需要注意的是,二叉搜索树中的元素不能有重复。代码class Solution {public: vector<int> vec; void traversal(TreeNode *node) { if(node == NULL) return

2021-12-24 23:43:06 353

原创 [LeetCode] 700. 二叉搜索树中的搜索

LeetCode 700. 二叉搜索树中的搜索思路二叉搜索树是一个具有有向性的有序树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉搜索树因此,二叉搜索树的遍历和普通二叉树不一样递归1)确定递归函数的参数和返回值传入参数就是根节点与需要搜索的目标数值返回值是以这个搜索数值所在的结点2)确定终止条件当该节点为空或者找到需要搜索的数值时,就返回该节点3)确定单层递归

2021-12-24 22:07:30 246

原创 [LeetCode] 617.合并二叉树

LeetCode 617.合并二叉树思路递归仍然采用递归的“三步法”:1)确定递归函数的参数和返回值传入参数为两个二叉树的根节点返回值为合并之后二叉树的根节点2)确定终止条件当一个树的节点为空时,则返回另一个树的节点3)确定单层递归逻辑假设两棵树分别为tree1、tree2,通过重复利用tree1,将合并后的元素值重新赋给tree1。tree1的左子树是:合并 tree1左子树 tree2左子树之后的左子树。tree1的右子树:是 合并 tree1右子树 tree2右子树之

2021-12-23 21:29:13 438

原创 [LeetCode] 654.最大二叉树

LeetCode 654.最大二叉树思路递归法的三部曲:1)确定返回值与入口参数2)确定终止条件3)确定单层递归操作的逻辑本题主要在于找到数组中的最大值,以此作为根节点,并将数组分割为左右两个子数组,从而递归的进行操作,构造左右子树。在分割左右两个子数组时,可以通过数组中最大值的索引进行分割。代码实现class Solution {public: TreeNode* constructMaximumBinaryTree(vector<int>& nums

2021-12-18 22:00:27 557

原创 [LeetCode] 105. 从前序与中序遍历序列构造二叉树

LeetCode 105. 从前序与中序遍历序列构造二叉树思路本题相对于[LeetCode] 106.从中序与后序遍历序列构造二叉树区别在于分割点,这道题的分割点在前序数组的第一个元素,后面在分割前序数组时需要将第一个元素舍弃代码实现class Solution {public: TreeNode *traversal(vector<int>& preorder, vector<int>& inorder) { i

2021-12-17 23:24:33 55

原创 [LeetCode] 106.从中序与后序遍历序列构造二叉树

LeetCode 106.从中序与后序遍历序列构造二叉树思路整体思路:由后序序列的最后一个元素确定根节点,从而将中序序列分为中序左序列和中序右序列,再根据中序左右序列在后序序列中确定后序左右序列,依次循环。步骤:1)判断中序与后序数组大小是否为0,为0说明为空节点2)不为空,则将后序数组中的最后一个元素作为节点3)以后序数组中的最后一个元素的索引作为分割点,将中序数组分割为左右两个子数组4)将后序数组中的最后一个元素删除,并利用上一得到的中序数组左子数组的大小对后序数组进行分割,将后序数组分

2021-12-17 23:02:01 309

原创 [LeetCode] 112.路径总和

LeetCode 112.路径总和思路递归1、确定返回值与传入参数参数:1)二叉树的根节点2)计数器,用于计算路径之和返回值:如果需要搜索整颗二叉树且不用处理递归返回值,递归函数就不要返回值。如果需要搜索整颗二叉树且需要处理递归返回值,递归函数就需要返回值。如果要搜索其中一条符合条件的路径,那么递归一定需要返回值,因为遇到符合条件的路径了就要及时返回。(本题)2、终止条件让计数器初试为目标和,每次减去遍历路径节点上的数值,当计数器值为0,并且到了叶子结点(左右子节点都为NUL

2021-12-17 21:49:00 669

原创 [LeetCode] 1.两数之和

LeetCode 1.两数之和思路利用哈希表来解决该问题使用map而不是用数组或者set来做哈希法的原因:数组大小受限制,当哈希值过大时,会造成内存空间不必要的资源浪费set是一个集合,里面放的元素只能是一个key,而这道题不仅要判断目标值是否存在,还需要记录目标值所处的下标索引位置而map是一种key value的存储结构,用key保存数值,value保存数值所在的下标索引位置代码class Solution {public: vector<int> twoSum

2021-12-08 22:45:35 150

原创 [LeetCode] 15三数之和与18四数之和(左右指针法)

LeetCode 15.三数之和思路1)由于题目中并未明确要求返回的数值需要与原数组的顺序一致,因此可以利用sort函数先对nums数组进行遍历排序,对排序后的数组进行下一步操作。2)经过排序后数组内可能含有重复出现的数值,会影响结果的输出,因此需要对重复出现的数值进行去重处理3)对去重处理后的数组利用左右指针法,实现遍历满足条件的数值,当三个数的值大于0时,需要将右指针向左移动,反之,当三个数的值小于0时,需要将左指针向右移动,这样做的目的是为了缩小遍历区间代码class Solution

2021-11-29 23:16:03 149

原创 [LeetCode] 202.快乐数

LeetCode 202.快乐数思路这道题主要的难点在于如何判断当无限循环也始终变不到1的情况方法在于:根据题目要求计算快乐数,当出现计算结果为1时,返回true,若不为1,则用哈希表的unordered_set容器存储每一次计算得到的结果(之所以用unordered_set是因为该容器不会重复存储已有的值),因此当出现循环时肯定会在unordered_set容器中找到已存储过的计算结果,此时返回false即可。代码class Solution {public: int getHap

2021-11-25 22:58:28 63

原创 [Linux]Ubuntu虚拟机的有线连接图标消失的解决方法

sudo service network-manager stopsudo rm /var/lib/NetworkManager/NetworkManager.statesudo service network-manager startsudo gedit /etc/NetworkManager/NetworkManager.conf(把false改成true)sudo service network-manager restart原文链接

2021-11-25 15:17:19 1193

原创 [LeetCode] 349.两个数组的交集

LeetCode349. 两个数组的交集思路利用哈希数据结构:unordered_set,其特点在于:1.不再以键值对的形式存储数据,而是直接存储数据的值(对于 unordered_set 容器不以键值对的形式存储数据,也可以这样认为,即 unordered_set 存储的都是键和值相等的键值对,为了节省存储空间,该类容器在实际存储时选择只存储每个键值对的值)2.容器内部存储的各个元素的值都互不相等,且不能被修改3.不会对内部存储的数据进行排序对于本题只需要将其中一个数组遍历存入unord

2021-11-24 23:53:25 78

原创 [LeetCode] 438. 找到字符串中所有字母异位词

LeetCode 438. 找到字符串中所有字母异位词思路利用长度为26的vector数组模拟哈希表。step1:将字符串p的每个字符存入哈希表pMap,哈希表的第一个元素表示字母,第二个元素表示该字母在字符串p中出现的次数;step2:遍历字符串s,将字符串s中的每个字符存入哈希表sMap,并且利用滑动窗口的思想,窗口大小为字符串p的长度,在哈希表sMap中减去相应字符出现的次数;step3:当遍历到某一窗口是满足 sMap == pMap 时,则将窗口左侧索引值存入返回值数值中。代码

2021-11-22 21:42:07 224

原创 [LeetCode] 242.有效的字母异位词

LeetCode 242.有效的字母异位词思路通过数组建立一个简单哈希表step1 定义一个数组用来记录字符串s里字符出现的次数,该数组即为简单哈希表;step2 遍历字符串s,将每个字符映射到哈希表索引上,字符映射可通过 s[i] -‘a’ 的操作,计算得到该字符所在哈希表的索引值,并在该索引处记录该字符出现的次数,即 +1 操作;step3 遍历字符串t,对t中出现的字符映射到哈希表索引上的数值做 -1 操作;step4 遍历哈希表,当出现表中的值不等于0时,即可判断s与t不是有效的字母异

2021-11-20 01:12:44 273

原创 [Linux] 静态库与动态库的制作与使用

静态库与动态库(共享库)(一)静态库与动态库(共享库)的区别:1)静态库:在程序的链接阶段被复制到了程序中(GCC进行连接时,会把静态库中代码打包到可执行程序中去)2)动态库:①程序在运行时由系统被动加载到内存中供程序调用(注:在链接阶段没有被复制到程序中,即动态库的代码不会打包到可执行程序中)②需要系统的动态载入器获取所依赖的库文件的绝对路径,对于elf格式的可执行程序,是由ld-linux.so 来完成的, 先搜索elf文件的DT_RPATH****段(在系统为进程分配的虚拟地址空间

2021-11-18 15:06:53 338

原创 [LeetCode] 142.环形链表II

LeetCode 142.环形链表II思路主要考察两点:1、判断链表是否有环2、若有环,如何确定环的入口判断链表是否有环:利用快慢指针法。定义fast指针和slow指针并都指向头结点,fast指针每次移动两个结点,slow指针每次移动一个结点,循环判断fast指针是否等于slow,当二者相等时,则表示链表存在环。确定环的入口结点:当fast指针等于slow指针时,定义一个临时结点tmp1,用于记录fast和slow相遇时的结点,并再定义一个临时结点tmp2,指向链表头结点,循环判断tmp1

2021-11-18 00:27:03 308

原创 [LeetCode] 面试题 02.07. 链表相交

LeetCode 面试题 02.07.链表相交思路题目的本意其实就是求两个链表相交处结点的指针,并返回该结点指针步骤:Step1.分别用两个指针curA、curB指向两个链表A、B的头结点Step2.求出链表A与链表B的链表长度Step3.实现两个链表末尾对齐,并且让curA与curB在同一起始结点上Step4.循环遍历两个链表,遇到相同的结点则直接返回代码class Solution {public: int getListLength(ListNode *cur){

2021-11-16 23:07:11 259

原创 [LeetCode] 24. 两两交换链表中的节点

LeetCode 24. 两两交换链表中的节点思路采用模拟法(创建一个虚拟头结点dummyHead(方便后续操作))Step1.当前指针cur->next指向cur->next->next结点Step2.将cur->next->next指向原链表的cur->next结点(需要提前保存一下)Step3.将cur->next->next->next指向原链表的cur->next->next->next结点(需要提前保存一下)S

2021-11-15 19:42:46 194

原创 [LeetCode] 19.删除链表的倒数第N个结点

LeetCode 19.删除链表的倒数第N个结点思路这道题是双指针法的经典应用。删除链表的倒数第N个结点,只需要让fast指针先移动N+1个结点,然后再让slow指针与fast指针同时移动,一直到fast指针指向链表末尾,最后删除slow所指向的结点(让fast指针先移动N+1个结点的目的是为了让fast指针与slow指针之间的距离保持在N+1个结点的长度上,这样才能当fast移动到链表末尾时,slow指针刚好落在需要删除结点的上一个结点处,方便进行删除操作)代码实现class Solution

2021-11-15 00:17:59 45

原创 [Linux]gcc编译过程

gcc -o hello hello.c 背后的编译过程gcc编译需要经历以下几个阶段:预处理编译汇编链接注:查看编译的详细信息可通过如下命令:gcc -o hello hello.c -vCC1命令:预处理gcc -E -o hello.i hello.c主要作用有:查找头文件 .h展开宏屏蔽注释编译gcc -E -o hello.i hello.c主要作用有:将高级语言转为汇编码检查语法错误as命令:汇编gcc -c -o he

2021-11-14 23:34:36 705

原创 [LeetCode] 206.反转链表

LeetCode 206.反转链表思路1)再定义一个新链表(弊端:容易导致内存空间的浪费)2)直接对原链表进行操作,改变每个结点的next指针指向的方向,从而实现链表的反转(推荐) 双指针法:定义一个指针cur指向原链表的头结点,再定义一个指针pre初始化为nullptr Step1:将cur->next结点用临时指针tmp保存一下 Step2:将cur->netx指向pre Step3:更新cur和pre指针,分别向后移动cur指针和pre指针 Step4:循环步骤1

2021-11-13 23:21:53 360

原创 [LeetCode] 707.设计链表

LeetCode 707.设计链表思路链表结点设置一个虚拟头结点,方便后续对链表的操作代码实现class MyLinkedList {public:struct ListNode{ int val; ListNode *next; ListNode(int x) : val(x), next(nullptr) {}}; MyLinkedList() { size = 0; dummyHead = new ListNode(0)

2021-11-13 01:13:01 754

原创 [LeetCode] 203.移除链表元素

LeetCode 203.移除链表元素链表的定义定义链表结点//单链表struct ListNode { int val; //节点上存储的元素 ListNode *next; //指向下一个节点的指针 ListNode(int x) : val(x), next(NULL){} //节点的构造函数(以初始化列表的形式进行构造函数的定义)};注: 若不定义构造函数,而是用C++的默认构造函数,在初始化的时候就不能直接给变量赋值!例如:1)通过自定义构造函数初始化节点:L

2021-11-11 23:49:16 506

原创 [LeetCode]54.螺旋矩阵

LeetCode 54.螺旋矩阵模拟解法思路(1)首先定义上下左右边界(2)其次向右移动到最右,此时第一行因为已经使用过了,可以将其从图中删去,体现在代码中就是重新定义上边界(3)判断若重新定义后,上下边界交错,表明螺旋矩阵遍历结束,跳出循环,返回答案(4)若上下边界不交错,则遍历还未结束,接着向下向左向上移动,操作过程与第一,二步同理(5)不断循环以上步骤,直到某两条边界交错,跳出循环,返回答案代码实现class Solution {public: vector<in

2021-11-10 23:16:26 71

原创 [LeetCode] 209.长度最小的子数组

LeetCode 209.长度最小的子数组方法一 暴力解法思路两个for循环,不断寻找符合条件的子序列代码class Solution {public: int minSubArrayLen(int target, vector<int>& nums) { int res = INT_MAX; //INT_MAX是个很大的数, //如果想得到数组中最小值,可以先将minn设成INX_MAX,

2021-11-09 22:42:25 44

原创 [LeetCode]27.移除元素及相关题目

LeetCode 27.移除元素方法一 暴力解法思路由于数组中的元素在内存地址中是连续存储的,不能单独删除数组中的某个元素,只能对某个元素进行覆盖操作,因此利用两层for循环:1) 第1层:遍历数组元素2) 第2层:更新数组代码class Solution {public: int removeElement(vector<int>& nums, int val) { int len = nums.size(); for (in

2021-10-11 23:24:20 53

原创 [LeetCode]704.二分查找及相关题目

数组理论基础数组理论数组是存放在连续内存空间上的相同类型数据的集合数组可以方便的通过下标索引的方式获取到下标下对应的数据二维数组在内存的空间地址是连续的二分查找LeetCode 704.二分查找二分法使用前提:有序元素 + 无重复元素区间的定义区间的定义就是不变量。要在二分查找的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是循环不变量规则。二分法的区间定义分为两种左闭右闭, [left,right]1)while(

2021-10-09 21:31:46 351

原创 [刷题前期储备]算法性能分析

时间复杂度大O用来表示算法的最坏情况运行时间的上界(即 对任意数据输入的运行时间上界)算法时间复杂的排行:O(1)常数阶 < O(logn)对数阶 < O(n)线性阶 < O(n^2)平方阶 < O(n^3)(立方阶) < O(2^n) (指数阶)1. 复杂表达式的简化例如**O(2n^2 + 10n + 1000) **去掉运行时间中的加法常数项O(2n^2 + 10n)去掉常项系数O(n^2 + n)**只保留保留最高项,去掉数量级小一级的n **O(

2021-10-08 21:40:40 85

原创 【OpenCV基础笔记6】模糊操作

一、均值模糊均值模糊实际上是使用了典型线性滤波算法中的均值滤波算法,是一种线性平滑技术,通过将图像与归一化卷积核进行卷积来实现地。它仅获取内核区域下所有像素的平均值,并替换中心元素。所谓模糊实际上是卷积在图像处理上的一种表现,也可称之为图像的平滑处理过程。均值模糊优点在于效率高,思路简单,缺点是计算均值会将图像中的边缘信息以及特征信息“模糊”掉,会丢失很多有用特征。在OpenCV中实现均值模糊的API函数为:def cv.blur(src, ksize, dst=None, anchor=No

2020-07-06 17:58:20 240

原创 【OpenCV基础笔记5】ROI与泛洪填充

一、ROI(region of interest)ROI(Region of interest),即感兴趣区域。有时在对一幅图像进行处理分析时,需要对其特定区域进行操作。例如我们需要检测一副人像中眼睛的位置,我们首先应在图像中找到人脸,再在人脸的区域范围内找到眼睛,这样可以提高程序执行的准确性和性能,而不是直接在一副图像中进行全局搜索。...

2020-07-05 21:56:41 280 1

ROS操作系统.7z

ROS新手教程ROS操作系统的入门资料【ROS简介、ROS总体框架、ROS新手教程、简单的机器人仿真、创建简单的机器人模型smartcar、使用smartcar进行仿真、smartcar源码上传、语音控制、机器视觉、坐标系统、导航与定位框架、move_base(路径规划)、amcl(导航与定位)】+机器人操作系统ROS典型功能实现方法详解

2020-07-05

空空如也

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

TA关注的人

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