- 博客(26)
- 收藏
- 关注
原创 【C/C++】宏、宏的作用/副作用
基础:宏是预处理指令;宏的本质是简单的字符串替换,预处理时进行宏替换;可在定义宏时要求它接收参数,宏替换时会代入参数;宏的名字不允许重载;宏预处理代码没有能力处理递归调用。作用:看一段math.h中的宏定义:#if defined _USE_MATH_DEFINES && !defined _MATH_DEFINES_DEFINED #define _MATH_DEFINES_DEFINED // Definitions of useful mathemati
2020-07-01 16:28:14
917
原创 【视觉算法】SHOT特征描述子
回顾一下上一篇文章学习的物体识别流程,首先计算模型点云特征,并将特征保存;然后计算场景点云特征,并将特征保存;在此基础上,进行特征匹配;每一对特征点,进行霍夫投票,投票峰值对应的那些点对,即为正确的特征对应;至此,剔除了错误点对;再根据正确的对应关系解算旋转矩阵和平移向量,即完成了物体识别和姿态估计。现在我们开始学习SHOT特征描述子,简要说明一下,SHOT特征描述子在构建的局部参考系内(旋转和...
2020-05-03 13:53:37
6396
6
原创 【视觉算法】广义霍夫变换在三维物体识别中的改进和应用学习
前两篇文章,学习了经典霍夫变换和广义霍夫变换,我们对霍夫变换的原理和整个过程有了较为清楚的认知。这篇文章主要学习广义霍夫变换在三维物体识别中的改进和应用。首先思考一个问题,如果直接将广义霍夫变换应用在三维场景下的物体识别中会怎么样?先确定未知参数的个数,由基本的三维物体识别和姿态估计知识,六个自由度,包括三个方向的角度和位移,即6个未知参数;直接应用(这里,以特征点的法线方向替代梯度方向[1]...
2020-04-29 11:56:52
2169
8
原创 【视觉算法】广义霍夫变换(Generalized Hough Transform)
在上一篇文章中,我们学习了经典霍夫变换,用以识别图像中的可解析图形;而广义霍夫变换(Generalized Hough Transform)旨在解决不可解析的不规则图形的识别问题。以下,结合Generalized Hough Transform (GHT)(Ballard and Brown, section 4.3.4, Sonka et al., section 5.2.6)这篇文章学习。...
2020-04-27 00:09:21
6975
5
原创 【视觉算法】霍夫变换(Hough Transform)
在进入正题之前,首先思考一个问题,在下图中,我们如何从散乱的点中寻找到直线?有多少直线?哪些点属于哪些直线?如果是找圆形呢?霍夫变换(Hough Transform)能很好的解决这些问题,要理解霍夫变换,首先要知道霍夫空间,看下图:可以看到,霍夫空间实际上是参数空间,在上图的变换中,图像空间中的直线的斜率和截距是未知参数,由这两个未知参数构造的空间就是对应的霍夫空间。图像空间中的一条直...
2020-04-26 13:48:46
2501
2
原创 【LeetCode刷题记录】20. 有效的括号
题目描述:题解:一、递归每次检查相邻且成对出现的合法符号,有则删除该对,直到没有相邻且成对出现的为止。map<char, char> wordbook = { { ')', '(' }, { ']', '[' }, { '}', '{' }};bool isValid(string s) { if (s.empty())return true; if (s.si...
2020-04-02 13:29:00
159
原创 【LeetCode刷题记录】19. 删除链表的倒数第N个节点
题目描述:题解:问题的关键是如何确定倒数第n个节点的位置,先看代码:ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode *h = new ListNode(0); h->next = head; ListNode *p = h; ListNode *k = h; if (head->next == ...
2020-04-02 12:06:35
139
原创 【LeetCode刷题记录】18. 四数之和
题目描述:题解:一、排序+双指针思路和三数之和类似,不赘述。vector<vector<int>> fourSum(vector<int>& nums, int target) { if (nums.empty() || nums.size() < 4)return{}; sort(nums.begin(), nums.end());...
2020-04-02 11:45:01
109
原创 【LeetCode刷题记录】17. 电话号码的字母组合
题目描述:题解:一、自己写的平庸全排列思路简单,直接看代码。vector<string> letterCombinations(string digits) { if (digits.empty())return{}; vector<string> key_map{ "abc","def","ghi","jkl","mno","pqrs","tuv","wxy...
2020-04-02 11:28:34
206
原创 【LeetCode刷题记录】16. 最接近的三数之和
题目描述:题解:一、排序+双指针类似上一题,思路比较简单,直接看代码。int threeSumClosest(vector<int>& nums, int target) { sort(nums.begin(), nums.end()); int rst = nums[0] + nums[1] + nums[2]; for (int i = 0; i < ...
2020-04-01 13:33:46
122
原创 【LeetCode刷题记录】15. 三数之和
题目描述:题解:一、排序+双指针思路简单,直接看代码。vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> rst; sort(nums.begin(), nums.end()); if (nums.empty() || nums...
2020-04-01 13:23:07
88
原创 【LeetCode刷题记录】14. 最长公共前缀
题目描述:题解:思路比较简单。一、水平扫描string longestCommonPrefix(vector<string>& strs) { string rst{}; if (strs.empty())return rst; for (int i = 0; i < strs[0].size(); i++) { char c = strs[0][i]...
2020-04-01 13:08:04
100
原创 【LeetCode刷题记录】13. 罗马数字转整数
题目描述:题解:一、直接求解(时间复杂度O(n),空间复杂度O(1))int romanToInt(string s) { int rst = 0; for (int i = 0; i < s.size(); i++) { switch (s[i]) { case 'M':rst += 1000; break; case 'D':rst += 500; brea...
2020-04-01 11:43:14
110
原创 【LeetCode刷题记录】12. 整数转罗马数字
题目描述:题解:两种解法,思路都比较简单,第二种比较有意思。一、暴力法(时间复杂度O(1),空间复杂度O(1))string intToRoman(int num){ string result; vector<string> tmpVec1 = { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" ...
2020-04-01 11:18:52
84
原创 【LeetCode刷题记录】11. 盛最多水的容器
题目描述:题解:一、暴力破解(时间复杂度:O(n2), 空间复杂度:O(1))BF方法的思路简单,两层循环,遍历所有可能性,找出其中最大的。不作赘述。二、双指针使用双指针,一个指头,一个指尾,面积=较短的高度*两者间距,短的一侧向中间移动,直至两指针重合。代码:int maxArea(vector<int>& height) { int res = 0; i...
2020-04-01 10:57:19
140
原创 【LeetCode刷题记录】10. 正则表达式匹配
题目描述:题解:一、回溯检查时,如果只考虑’.’,显然只需要同时在s和p中越过当前元素就可以了。对于’*’,要分两种情况考虑:1、表示0个前面那个元素,这时在p中越过它和它前面那个元素,s不变;2、表示1个前面那个元素(可以扩展到n个),这时在s中越过当前元素,p不变。引用官方解答的一句话:“当模式串中有星号时,我们需要检查匹配串 s 中的不同后缀,以判断它们是否能匹配模式串剩余的...
2020-03-12 19:51:19
266
原创 【LeetCode刷题记录】9. 回文数
题目描述:题解:思路比较简单,引用官方题解:bool isPalindrome(int x) { if (x < 0 || (x % 10 == 0 && x != 0)) return false; int reverted_num = 0; while (x > reverted_num) { reverted_num = reverted_num...
2020-03-10 12:44:15
82
原创 【LeetCode刷题记录】8. 字符串转换整数 (atoi)
题目描述:题解:思路比较简单,这样写代码比较简洁:int myAtoi(string str) { int len = int(str.size()); int rst = 0; int sign = 0; bool started = false; for (int i = 0; i < len; i++) { if (str[i] == ' ' &&...
2020-03-10 12:18:49
121
原创 【LeetCode刷题记录】7. 整数反转
题目描述:题解:思路简单,注意溢出就可以了(-2147483648, 2147483647)。int reverse(int x) { int rst = 0; while (x != 0) { int pop = x % 10; x /= 10; if (rst > INT32_MAX / 10 || (rst == INT32_MAX / 10 &&am...
2020-03-10 10:58:09
105
原创 【LeetCode刷题记录】5. 最长回文子串
题目描述:题解:一、暴力破解(时间复杂度:O(n3),空间复杂度:O(1),超出时间限制(TLE))BF方法的思路比较简单,逐个检查所有的子字符串,看它是否是回文子串。二、中心扩展算法逐字符访问,以当前字符(奇数)或当前和下一字符(偶数)为中心,向两边扩展,检查是否为回文。共有n+n-1个中心。int expendaroundcenter(string s, int left, in...
2020-03-09 20:31:20
107
原创 【LeetCode刷题记录】4. 寻找两个有序数组的中位数
题目描述:一个最简单、最容易想到的方法是:将两个数组排序、存入同一个vector,计算中位数,如:double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int n = nums1.size(); int m = nums2.size(); //vector&...
2020-03-07 19:32:20
83
原创 【LeetCode刷题记录】3. 无重复字符的最长子串
题目描述:题解:一、暴力破解(时间复杂度:O(n3),空间复杂度:O(min(n,m)),超出时间限制(TLE)) BF方法的思路比较简单,逐个检查所有的子字符串,看它是否不含有重复的字符。取不重复子字符串中长度最大的那个作为结果输出。二、双指针滑动窗口(时间复杂度:O(n2),空间复杂度:O(1))int lengthOfLongestSubstringSlide(string s)...
2020-03-05 20:22:05
184
原创 【LeetCode刷题记录】2. 两数相加
题目描述:单链表定义:struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};打印链表:正序:void printListNode(ListNode* ln) { ListNode* ln_temp = ln; while (ln_temp != NULL) {...
2020-03-05 13:27:19
136
原创 【LeetCode刷题记录】1. 两数之和
题目描述:题解:一、暴力破解vector<int> twoSumBF(vector<int>& nums, int target) { //brute force for (int i = 0; i < nums.size(); i++) { int complement = target - nums[i]; for (int j = 0; ...
2020-03-05 12:42:25
106
原创 c++贪吃蛇
空余时间写了贪吃蛇,基于microsoft windows console和c++标准库。Snake.h#pragma once// code by ciderpark// ciderpark@163.com#include <iostream>#include <string>#include <cstdlib>#include <win...
2019-09-01 09:32:44
190
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人