自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 点云深度学习之数据集处理(一)数据集的分类

前段时间在做点云深度学习网络课题时,随手在博客“ModelNet40 中加入自己的数据集”中放了两串代码,目的是方便自己的存取(当时不会GIT的菜鸟)。结果成了所写博客中访问最多,提问最多的博文(瑟瑟发抖)。近段时间在恶补语言基础知识,索性换换脑,将这部分的知识进行一个相对完整的整理。希望对那些想快速入手点云深度学习,用来做课设、毕设的小朋友一点点帮助。以下都是个人的所学所思所想,不一定正确,仅做...

2020-05-02 21:24:11 10234 9

原创 计算机网络面试考点归纳

2020年秋招期间自己归纳总结的牛客上相关的面试考点。通过秋招面试情况来看,大部分问题确实有被问到,对自己也有非常大的帮助。不建议直接看我写的回答,而是带着问题去总结自己的回答。相信坚持就会有好结果。22个问题,共计七千余字。1、 OSI七层协议知道吧,为什么要进行分层呢物(物理层)联(链路层)网(网络层)输(传输层)会(会话层)示(表示层)用(应用层)应用层:为应用程序提供服务,包括提供应用进程所需要的的信息交换和远程服务,还要作为应用进程的用户代理,完成进行信息交换所必要的功能。表示层:通信的

2020-11-11 17:43:49 481 1

原创 数据库面试考点归纳

2020年秋招期间自己归纳关于数据库的考点。通过秋招面试情况来看,大部分问题确实有被问到,对自己也有非常大的帮助。不建议直接看我写的回答,而是带着问题去总结自己的回答。相信坚持就会有好结果。31个问题,共计九千多字。1、 数据库的三大设计范式数据库范式就是一张数据表的表结构所符合的某种设计标准的集合。第一范式:列不可分,符合1NF的关系中的每个属性都不可再分。第二范式:若某关系R属于第一范式,且每一个非主属性完全函数依赖于任何一个候选码,则关系R属于第二范式。理解: 第二范式是指每个表必须有一个(

2020-11-11 17:06:56 379

原创 C++基础知识面试考点归纳

2020年秋招期间自己归纳总结的牛客上有关C++常见的面试考点。通过秋招面试情况来看,大部分问题确实有被问到,对自己也有非常大的帮助。不建议直接看我写的回答,而是带着问题去总结自己的回答。相信坚持就会有好结果。58个问题,共计一万五千多字。1、 c++重载(overload)和重写(override)的区别重载是一组函数名相同但是参数特征标不同的方法,特征:方法名必须相同,参数列表必须不同,返回参数可以不同。其中返回参数可以不同,体现在函数重载是在编译阶段完成,是一个静态编译过程,而c++调用函数是

2020-11-11 17:01:23 758

原创 计算机操作系统面试考点归纳

从第一次接触计算机操作系统到现在也已经有两个月时间了。不停的忘也在不停的理解记忆。这次花了两天时间二刷王道考研的计算机操作系统课程,并结合讲义内容自己做了相关考点的归纳总结,一轮下来总体感觉在整个知识点框架的搭建上有了更加清晰的认识。现将归纳的知识点分享记录如下:41个问题,一万一千多字,不涉及文件、磁盘管理和I/O管理:1、 什么是操作系统操作系统首先是一种系统软件,是计算机软件和硬件资源的管理者,为上层应用或用户提供简单易用的服务。操作系统作为资源的管理者主要有:文件管理,内存管理,处理机管理和设

2020-09-02 10:31:42 779

原创 普里姆算法Prim实现最小生成树

再次推荐B站视频青岛大学王卓老师的数据结构,讲的非常通俗易懂。结合了“大话数据结构”用C++实现了相关代码;#include<iostream>#include<vector>using namespace std;struct Graph { vector<vector<int>> arc; vector<char> vexs; int numVexter; int numEdge; Graph(){} Graph(i

2020-08-26 17:00:58 258

原创 图的创建和遍历

第一轮在学习数据结构时有意避开了图章节,自我暗示面试不会问。躲还是躲不掉的,学还是要学的。“大话数据结构”结合B站视频学习了一遍。自己将图的邻接矩阵表示方法和邻接表的表示方式以及图的遍历写了一遍,加深印象。无向图邻接矩阵表示:#include<iostream>#include<vector>using namespace std;struct Graph { vector<char> vexs; vector<vector<int&gt

2020-08-25 16:47:23 287

原创 哈夫曼树与哈夫曼编码和解码实现

今天在复习哈夫曼树的时候,发现了一个不错的B站视频,讲解的非常清晰直观。地址传送门。有讲到了哈夫曼树的原理及哈夫曼编码解码的过程。原理讲解直接移步上述链接,就不再画蛇添足。作为巩固随手练习一道题:给定一篇文章,统计里面的各个字符出现的频次,并构建哈夫曼树,实现哈夫曼编码和解码的过程。并且计算哈夫曼编码和定长编码的空间节省了多少?输入的文本:each year, the american heart association (aha), in conjunction with the centers f

2020-08-24 21:34:42 1523 2

原创 观察者模式

官方定义:观察者模式定义了一种一对多的依赖关系,让多个观察者对象,同时监听某一个对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使他们能够自动更新自己。自己理解:当一个类的改变会引起其他多个类的改变时,为了维护一致性会使各个类紧密耦合。观测者模式就是让耦合的双方都依赖于抽象,而不是依赖于具体,达到解耦合的目的。(依赖倒装原则)UML图:代码实现:#include<vector>using namespace std;//Step1 抽象主题class Subjec

2020-07-14 22:53:29 128

原创 策略模式

官方定义:策略模式是一种定义一些列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类别与使用算法类之间的耦合。自己理解:用来避免设计的类中同时包含众多的实现,并且实现算法之间用开关型语句(例如:if else if, switch case 等)进行多级判断所导致的代码改写复用困难等问题。UML图:代码示例:// Step1: 定义抽象策略类class Strategy {public: virtual void

2020-07-14 16:17:25 122

原创 模板方法模式

官方定义:模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。自己的思考:模板方法是把一个确定不变的行为过程转移到基类,并在基类中定义确定的行为步骤,将不确定的行为利用虚函数机制,在子类中进行覆写(override),从而实现不变行为的代码复用,(早绑定 vs 晚绑定)。UML类图:代码实现:#include<iostream>//库函数,函数底层代码块class Library {pr

2020-07-14 15:10:43 150

原创 平衡二叉树构建及递归和非递归遍历树实现(c++)

最近面试被问到平衡二叉树的性质及手撕构建平衡二叉树。当时无从下手,翻看牛客网面经,发现是一个常考点。虽然代码量相对较多,但确实是必须要掌握的知识。记录如下:性质:1、平衡二叉树其左右子树都为平衡二叉树,且树的深度的绝对值不会超过1;2、将平衡因子(BF)定义为,其左子树的深度减去右子树的深度,则只会有-1,0,1三种情况;3、平衡二叉树属于二叉搜索树(BST),也满足二叉搜索树的一些性质:左子树和右子树都是二叉搜索树。左子树所有节点值都小于等于其根节点值,右子树所有节点的值都大于等于其根节点的值;

2020-07-10 14:21:47 441

原创 几种常见的排序算法实现(C++)

记录了冒泡排序,选择排序,直接插入排序,希尔排序,快速排序,堆排序和归并排序的实现。#include<iostream>#include<vector>using namespace std;void bubbleSort(vector<int> &s) { for (int i = s.size(); i > 0; i--) { for (int j = 1; j < i; j++) if (s[j - 1] > s[j]

2020-07-04 10:26:39 223

原创 合并两个有序链表(递归和非递归方法C++)

利用递归和非递归方法合并两个有序链表:注意点:1、代码中以输入的方式生成两个链表,在生成完毕第一个链表之后要将cin的内容清空。不然会引起第二个链表无法输入生成的问题。#include<iostream>#include<vector>using namespace std;struct Node { int val; Node* next; Node(int num):val(num),next(nullptr){}};Node* CreatList(

2020-07-02 13:15:49 240

原创 判断链表是否有环,入口节点以及环的大小(C++)

这篇博客对上述问题有详细的解释:判断链表中是否有环 ----- 有关单链表中环的问题这里只做C++的一个代码实现,主要包含构建环形链表,判断是否有环以及环的大小。#include<iostream>#include<vector>using namespace std;struct Node { int val; Node* next; Node(int num):val(num),next(nullptr){}};Node* CreatCircularL

2020-07-01 09:48:45 419

原创 有关链表的一些基本操作(C++)

记录下有关链表的一些基本操作,包括创建链表,打印链表,链表长度,找到指定节点,插入节点,删除节点,反转链表,找到中间节点和链表排序。#include<iostream>#include<vector>using namespace std;struct Node { int val; Node* next; Node(int num):val(num),next(nullptr){}};Node* CreatList() { Node* head = ne

2020-07-01 08:51:24 144

原创 大话设计模式之策略模式C++实现

博客中的例题及构建思想均来自于程杰老师的“大话设计模式”。策略模式和简单工厂模式在实现上没有太大的区别。策略模式相对于工厂模式最大的优点就是将各个算法策略都进一步封装在了Context对象中。客户端只需要认识一个类Context就行了,进一步降低了耦合度。实现商场打折促销:(简单工厂和策略模式)#include<iostream>using namespace std;class CashSuper {public: virtual double acceptCash(doub

2020-06-30 09:57:29 162

原创 大话设计模式之简单工厂模式C++实现

博客中的例题及构建思想均来自于程杰老师的“大话设计模式”。通过封装,继承,多态把程序的耦合度降低,使得程序更加灵活,易于修改且易于重复。考虑一个用单独的类来创造实例的过程,这就是工厂。实现简单的四则运算过程:#include<iostream>using namespace std;class Operation {private: double _NumA; double _NumB;public: void SetNumA() { cout << "

2020-06-29 13:05:11 3952

原创 c++利用栈实现队列和利用队列实现栈

c++利用栈实现队列和利用队列实现栈#include<iostream>#include<stack>#include<queue>using namespace std;class Queue {public: void pop() { if (data1.empty()) { cout << "queue is null" << endl; return; } while (!data1.empty()

2020-06-23 12:14:19 279

原创 c++实现批量修改文件名及文件的归档移动

最近接到一个小任务,需要对150人的文档进行分类汇总,每个人有两个文件。最终需要将每个人的两个文件新建一个文件夹进行单独存放。就尝试用C++代码批量处理了一波,记录如下:一、问题分析:1、由于每个文件是每个学生提交,因此最终的文档呈现各种不规范的命名方式。2、有的学生存在学号写错的情况。二、解决想法及流程:1、批量修改文件名,统一化命名方式;2、程序自动检查同一个人的两个文件名中的学号是否一致,抛出信息,手动核查;3、自动新建个人文件夹,并将个人的两个文件移动到该文件下;4、反向校验,将归档

2020-06-23 10:31:03 1121

原创 Leetcode学习笔记(974. 和可被 K 整除的子数组)

前缀和,注意c++取模被除数为负数情况,要进行调整:class Solution {public: int subarraysDivByK(vector<int>& A, int K) { int out = 0; unordered_map<int ,int> data; data[0]=1; int sum = 0; for(size_t i=0;i<A.size();i+.

2020-05-27 19:00:23 153

原创 Leetcode学习笔记(24. 两两交换链表中的节点)

用栈进行替换:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* swapPairs(ListNode* head) { if (head == nullptr |.

2020-05-25 22:17:13 169

原创 Leetcode学习笔记(146. LRU缓存机制)

这道题算法方面倒不是难点,主要在于类和数据结构额设计,如何高效合理。struct DListNode{ int key, value; DListNode* pre; DListNode* next; DListNode():key(0),value(0),pre(nullptr),next(nullptr){} DListNode(int _key, int _value):key(_key),value(_value),pre(nullptr),next(nu.

2020-05-25 19:00:07 166

原创 Leetcode学习笔记(29. 两数相除)

递归加移位思想,困住我的竟然是边界溢出值,要哭了:class Solution {private: int function(long num, long divisor) { if (num<divisor) return 0; long long time = 1; long long temp = divisor; while (num >= temp) { temp = temp << 1; time = time << .

2020-05-24 22:08:01 199

原创 Leetcode学习笔记(22. 括号生成)

递归调用:1、function函数中的string参数需要定义成const引用;class Solution {private: vector<string> out; void function(const string &solution, int left, int right, int n){ if(right == n && left == n){ out.push_back(solution);.

2020-05-24 20:50:38 181

原创 Leetcode学习笔记(12. 整数转罗马数字)

class Solution {public: string intToRoman(int num) { string Roman[13] = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"}; int data[13] = {1000,900,500,400,100,90,50,40,10,9,5,4,1}; string out; int start = 0;.

2020-05-24 20:08:01 131

原创 Leetcode学习笔记(76. 最小覆盖子串)

滑动窗口加HASH表:class Solution {private: map<char, int> data; bool check(map<char, int> &data) { map<char, int>::iterator it; for (it = data.begin(); it != data.end(); it++) { if (it->second > 0) return false; } r.

2020-05-23 21:15:35 146

原创 PCL库学习笔记(为点云上色的几种方法详解)

近段时间在学习PCL库,在点云上色的问题中进行了一个小总结。分别实现了一下几个功能:1. 显示点云自带的颜色信息;2. 根据点云的某个属性进行上色(例如:X,Y,Z等方向上不同颜色);3. 自定义单一颜色(给某个点云显示同一个颜色);4. 随机上色(由编译器随机给点云分配单一颜色);5. 显示点云的法线方向和法向量;下文会分别介绍上述功能的实现,并提供代码示例:1、显示点云自带的颜色信息(PointCloudColorHandlerRGBField)boost::shared_ptr<

2020-05-23 15:25:50 11479 1

原创 PCL库学习笔记(一个窗口同时显示多个点云和依次显示不同点云)

本文利用 PCLViewer 类实现对点云的可视化,并描述两种情况的代码实现:一个窗口同时显示多个点云和依次显示不同点云。这两个要求其实在很久之前利用PCL库工具时就遇到过,能够大大简化当时的工作量。但是没有精力和耐心对其中原理进行探究。这次的系统学习,强迫自己进行了较深入的了解,记录如下:首先认识三个函数:boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::

2020-05-22 23:28:31 4502

原创 PCL库学习笔记(PCL Visualizer)

本文展示了PCL Visualizer的几种基本用法。代码的主体是点云库提供的源代码。由于其是由cmake进行编译,有输入参数的选择问题。为了方便VS的调试运行过程,将其中的输入接口进行了修改:代码中学习到的几个知识点:1、int main( int argc, char* argv[] ) 中arg和argv参数的含义;参考博客:https://blog.csdn.net/dgreh/article/details/809859282、注意RGB合成的原理uint32_t rgb = (stat

2020-05-22 20:48:08 509

原创 Leetcode学习笔记(5. 最长回文子串)

两种情况考虑,反向思维:class Solution {public: string longestPalindrome(string s) { if (s.size() <= 1) return s; int mid = 0; int max_length = 1; for (int i = 0; i<s.size() - 1; i++) { int temp1 = funt(s, i, i); int temp2 = funt(s, i, i + 1.

2020-05-21 13:19:05 107

原创 PCL库学习笔记(octree无序点云的空间变化检测)

本文描述了如何利用octree快速检测两个点云之间的变化,并且返回变化点的index;值得注意的是,此处并不是检测不同点的坐标,而是将两个点云建立octree之后,后者比前者多出来的voxels。这里也有疑问就是两个点云的voxels是通过什么条件判断相等的?#include<iostream>#include<pcl/point_cloud.h>#include<pcl/io/io.h>#include<pcl/point_types.h>#inc

2020-05-20 22:46:51 463

原创 PCL库学习笔记(Octree寻找邻近点及其应用)

上文我们利用了kdtree进行邻近点的提取。在点云pcl库中,还有一个重要的点查找方法就是octree。其原理和应用在这篇博文中有了比较详细的介绍:PCL中八叉树理论octree有三种寻找最近邻的方式分别为:1、neighbors within voxel search 就是返回该点所在的voxel中的所有其他点的索引;2、K nearest Neighbor search 就是返回该点最近的K个点;3、Neighbors within radius search 就是返回限定半径范围内的所有点;

2020-05-20 21:42:40 1701

原创 PCL库学习笔记(KD树及K近邻搜索)

本文学习了一种快速寻找无序点云的邻近点方法,就是构造KD树。用树这种数据结构,能够忽略掉许多点的比较,提高搜索速度。原理部分这篇博客讲的非常详细:#include<pcl/point_cloud.h>#include<pcl/kdtree/kdtree_flann.h>#include<vector>#include<iostream>#include<ctime>int main(){ srand(time(NULL));

2020-05-20 19:57:40 1718 1

原创 Leetcode学习笔记(1371. 每个元音包含偶数次的最长子字符串)

前缀和和状态码:class Solution {public: int findTheLongestSubstring(string s) { int ans = 0, status = 0, n = s.size(); vector<int> pos(32, -1); pos[0] = 0; for (int i = 0; i < n; i ++) { if (s[i] == 'a') .

2020-05-20 14:59:16 136

原创 Leetcode学习笔记(680. 验证回文字符串 Ⅱ)

简单题:双指针class Solution {private: bool funt(string s,int &begin, int &end) { while(begin<=end&&s[begin]==s[end]){ begin++; end--; } if(begin>end) return true; .

2020-05-19 20:59:21 120

原创 PCL库学习笔记(点云输入输出与拼接)

现在开始C++巩固加上数据结构刷题加PCL库系统学习开始交替进行。感觉东西越学越多,忘得也越来越多,戒骄戒躁,持之以恒。本文主要介绍PCL库的点云读入,拼接和保存的用法:两点说明:1、 在定义点云变量时,如下代码中有两种方法: 一种是指针型的(pcl::PointCloud<pcl::PointXYZ>::Ptr cloudPtr(new pcl::PointCloud<pcl::PointXYZ>)) 一种是常规(pcl::PointCloud<pcl::Point

2020-05-19 11:31:54 760 1

原创 Leetcode学习笔记(70. 爬楼梯)

方法一:递归法(超出时间限制)class Solution {private: int recursive(int n){ if(n==0||n==1) return 1; return recursive(n-1)+recursive(n-2); }public: int climbStairs(int n) { return recursive(n); }};方法二:记忆化搜索.

2020-05-18 14:19:07 136

原创 Leetcode学习笔记(86. 分隔链表)

方法一:遍历链表,用两个队列分别存储小于x和大于等于x的值,最后再合并:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* partition(ListNode* .

2020-05-17 13:33:11 144

原创 Leetcode学习笔记(143. 重排链表)

解法一:引入栈和队列的性质,缺点就是引入大量的额外空间;/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNo.

2020-05-16 21:50:48 204

PCL_1_9_1_prebuild_pcl_visualization_release.dll-master.zip

Anel Salas 重新编译了pcl_visualization_release.dll,下载后放在路径“C:\Program Files\PCL 1.9.1\bin”下替换即可。注意:只重新编译了“release”版本,因此VS运行必须在release下才会不报错。

2020-05-23

空空如也

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

TA关注的人

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