算法
文章平均质量分 89
Fm镄
这个作者很懒,什么都没留下…
展开
-
相机成像模型、内参矩阵、外参矩阵
相机针孔成像模型基本的小孔成像过程:X坐标系是针孔所在坐标系,Y坐标系为成像平面坐标系,P为空间一点,小孔成像使得P点在图像平面上呈现了一个倒立的像,俯视图如下:由三角相似关系可以得到:初步相机矩阵相机成像的本质:就是三维空间坐标到二维图像坐标的变换,这是一个投影过程。相机矩阵就是建立这种三维到二维的投影关系。如果我们用[xw yw zw ]来表示一个空间点的坐标,用[x y]来表示对应于成像平面上的一个图像点的坐标(不是像素坐标),那么这两个点肯定...原创 2021-11-09 11:09:21 · 4153 阅读 · 0 评论 -
刷题笔记:再写几个剑指Offer中得题!(未完)
#剑指Offer36.二叉搜索树与双向链表/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node() {} Node(int _val) { val = _val; left = NULL; right = NULL; } Node(int _val, Node* _lef原创 2020-07-27 14:48:00 · 73 阅读 · 0 评论 -
刷题笔记:极小化极大专题(太难了,等有空再研究!!!!)
#292.Nim游戏找到数学规律:class Solution {public: bool canWinNim(int n) { int base=3; if(n%(base+1)==0){ return false; } else{ return true; } }};也可以用博弈的动态规划思想:状态转移方程:f(n) = !(f(n-原创 2020-07-27 09:41:25 · 151 阅读 · 0 评论 -
刷题笔记:LeetCode精选TOP面试题(3)
#218.天际线问题经典分治算法,虽然是困难题但值得研究一下!!public List<List<Integer>> getSkyline(int[][] buildings) { if(buildings.length == 0){ return new ArrayList<>(); } return merge(buildings, 0, buildings.length - 1);}private List&原创 2020-07-25 10:43:46 · 136 阅读 · 0 评论 -
刷题笔记:LeetCode精选TOP面试题(2)
#101.对称二叉树递归法:class Solution {public: bool check(TreeNode *p, TreeNode *q) { if (!p && !q) return true; if (!p || !q) return false; return p->val == q->val && check(p->left, q->right) &&原创 2020-07-22 21:52:28 · 228 阅读 · 0 评论 -
刷题笔记:扫描线思想
#1288.删除被覆盖区间官方题解:class Solution {public: int removeCoveredIntervals(vector<vector<int>>& intervals) { int n = intervals.size(); sort(intervals.begin(), intervals.end(), [](const vector<int>& u, const vec原创 2020-07-22 11:37:26 · 157 阅读 · 0 评论 -
刷题笔记:Random专题 在某大厂的3轮面试中遇到了2次本类型的题!!
#470 用Rand7()实现Rand10()// The rand7() API is already defined for you.// int rand7();// @return a random integer in the range 1 to 7class Solution {public: int rand10() { while(true){ int a=rand7(); int b=rand7();原创 2020-07-21 22:03:39 · 245 阅读 · 0 评论 -
刷题笔记:回溯、递归、分治
#78.求子集递归法:位运算法:#90.求子集2#40.组合数之和2#22.生成括号class Solution {public: vector<string> generateParenthesis(int n) { vector<string> result; int lc=0,rc=0; DFS(result,"",n,lc,rc); return resu.原创 2020-07-20 15:41:52 · 108 阅读 · 0 评论 -
数据结构复习:搞懂十大排序算法(未完)
1.排序算法概述1.1分类:比较类排序(非线性时间):通过比较来决定元素间的相对次序,由于其时间复杂度不能突破因此被称为非线性时间比较类排序。非比较类(线性时间):不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界以线性时间运行。1.2算法复杂度2.插入排序2.1简单插入排序...原创 2020-05-12 08:28:44 · 169 阅读 · 0 评论 -
刷题笔记:LeetCode精选TOP面试题
#1.两数之和暴力求解:时间复杂度O(n^2) 空间复杂度O(1)class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> result; for(int i=0;i<nums.size();i++){ for(int j=i+1;j<nums.size();j++){..原创 2020-07-18 21:48:25 · 220 阅读 · 1 评论 -
刷题笔记:高级数据结构专题(第一遍刷搞懂每道题的解法;第二遍刷搞懂这一类题通用的思想和策略;第三遍刷思考什么样的题属于这个类别
Trie树(字典树)概述#define TRIE_MAX_CHAR_NUM 26struct TrieNode{ TrieNode *child[TRIE_MAX_CHAR_NUM]; bool is_end; TrieNode():is_end(false){ for(int i=0;i<TRIE_MAX_CHAR_NUM;i++){ child[i]=0; } }}...原创 2020-07-16 21:55:25 · 182 阅读 · 0 评论 -
刷题笔记:动态规划专题(第一遍刷搞懂每道题的解法;第二遍刷搞懂这一类题通用的思想和策略;第三遍刷思考什么样的题属于这个类别
动态规划概述动态规划是运筹学的一个分支,是求解决策过程最优化的数学方法。它是一种最优化原理,利用各阶段之间的关系逐个求解,最终求得全局最优解。在设计动态规划算法时,需要确认原问题与子问题、动态规划状态、边界状态结值、状态转移方程等关键要速。动态规划原理确认原问题与子问题 确认状态 确认边界状态的值 确定状态转移方程例1:爬楼梯(LeetCode70-简单)题目:假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?..原创 2020-07-15 22:18:01 · 327 阅读 · 0 评论 -
刷题笔记:搜索专题(第一遍刷搞懂每道题的解法;第二遍刷搞懂这一类题通用的思想和策略;第三遍刷思考什么样的题属于这个类别)
例1:岛屿数量(LeetCode 200-中等)题目:给你一个由'1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。实例:输入:11000110000010000011输出: 3思路分析:使用深度优先或者广度优先搜索对每个陆地连通得区域全部搜索并标记,最终进行深搜或宽搜得次数就是岛屿得数量代码:使用深度优先:c.原创 2020-06-15 21:52:47 · 289 阅读 · 0 评论 -
刷题笔记:队列、栈、堆
队列实现栈class mystack {public: void push(int x) { queue<int> temp_queue; temp_queue.push(x); while (!_data.empty()) { temp_queue.push(_data.front()); _data.pop(); } while (!temp_queue.empty()) { _data.push(temp_queue.front())原创 2020-07-13 10:36:24 · 89 阅读 · 0 评论 -
刷题笔记:链表
反转链表class Solution {public: ListNode* reverseList(ListNode* head) { ListNode* result=NULL; while(head) { ListNode* temp=head->next; head->next=result; result=head; head=t原创 2020-07-13 10:36:32 · 139 阅读 · 0 评论 -
刷题笔记:二分查找与二叉排序树(第一遍刷搞懂每道题的解法;第二遍刷搞懂这一类题通用的思想和策略;第三遍刷思考什么样的题属于这个类别)
1.二分查找1.1预备知识例1:二分查找(递归)已知一个排序数组A,如A=[-1,2,5,20,90,100,207,800]另外一个乱序数组B,如B=[20,90,3,-1,207,80]求B中得任意某个元素是否在A中出现,结果存储在数组C中,出现用1表示,未出现用0表示,如,C=[0,1,0,1,1,0]正常暴力查找需要O(AB)时间复杂度,使用这班查找需要O(BlogA)//二分查找bool binary_search(vector<int> &so原创 2020-06-10 16:07:57 · 229 阅读 · 0 评论 -
刷题笔记:二叉树与图专题(第一遍刷搞懂每道题的解法;第二遍刷搞懂这一类题通用的思想和策略;第三遍刷思考什么样的题属于这个类别)
1.二叉树相关基础1.1二叉树的构造在本刷题笔记中不会介绍概念等基础知识,更多记录代码演示等与算法编码能力直接相关的内容。首先看回顾一下二叉树数据结构的代码实现:struct TreeNode { TreeNode * left; TreeNode * right; int value; //使用对象初始化列表进行初始化 TreeNode(int x):value(x)...原创 2020-04-08 09:43:32 · 254 阅读 · 0 评论 -
刷题笔记:哈希表与字符串专题(第一遍刷搞懂每道题的解法;第二遍刷搞懂这一类题通用的思想和策略;第三遍刷思考什么样的题属于这个类别)
1.哈希表1.1基本概念哈希表(散列表),是根据关键字值key直接进行访问的数据结构,它通过把关键字值映射到表中一个位置(数组下标)来直接访问,以加快查找关键字值的速度。这个映射函数叫做哈希(散列)函数,存放记录的数组叫做哈希(散列)表。给定一个表M,存在函数f(key),对任意的关键字值key,带入函数后若能得到包含该关键字的表中地址,称表M为哈希表,函数f(key)为哈希函数。...原创 2020-04-01 21:37:41 · 409 阅读 · 0 评论 -
剑指Offer(一):二维数组中的查找[数组]
牛客网刷题笔记记录。参考自:https://cuijiahua.com/blog/2017/11/basis_1.html一.题目在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数二.思路分析根据题目所给数组的特征,逐步缩小搜索范围。先选区数组...原创 2019-03-11 10:30:02 · 112 阅读 · 0 评论 -
剑指Offer(十六):合并两个排序的链表
牛客网刷题笔记记录。参考自:https://cuijiahua.com/blog/2017/12/basis_16.html一.题目 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。二.思路分析(1)递归解法先判断输入的链表是否为空的指针。如果第一个链表为空,则直接返回第二个链表;如果第二个链表为空,则直接返回第一个链表。如果两...原创 2019-10-16 21:12:18 · 75 阅读 · 0 评论 -
剑指Offer(九):变态跳台阶[递归循环]
牛客网刷题笔记记录。参考自:https://cuijiahua.com/blog/2017/11/basis_9.html一.题目一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。二.思路分析一开始我类似《跳台阶》题目的思路进行思考,可以找到f(n)=f(1)+f(2)+....+f(n-1)+1的数学递推关系式(简单解释...原创 2019-03-15 14:01:27 · 118 阅读 · 0 评论 -
剑指Offer(二):替换空格[字符串]
牛客网刷题笔记记录。参考自:https://cuijiahua.com/blog/2017/11/basis_2.html一.题目请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。二.思路分析最简单的方法就是从头到尾遍历,但是时间复杂度为O(n^2)。本文采用一种时间复杂...原创 2019-03-11 20:04:49 · 225 阅读 · 0 评论 -
剑指Offer(三):从尾到头打印链表[链表]
牛客网刷题笔记记录。一.题目输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。二.思路分析链表的遍历方式为从前往后,要求的输出为从后往前。这明显是一个先进后出的问题,由此想到利用栈进行解决本问题。三.编程实现C++class Solution {public: vector<int> printListFromTailToHead(...原创 2019-03-11 21:10:13 · 71 阅读 · 0 评论 -
剑指Offer(四):重建二叉树[二叉树]
牛客网刷题笔记记录。参考自:https://cuijiahua.com/blog/2017/11/basis_4.html一.题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。二.思路分析通常树...原创 2019-03-12 15:50:50 · 84 阅读 · 0 评论 -
剑指Offer(五):用两个栈实现队列[栈]
牛客网刷题笔记记录。参考自:https://cuijiahua.com/blog/2017/11/basis_5.html一.题目用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。二.思路分析乍一看这道题目时感觉很简单不就是把数据们从一个栈里倒腾到另一个栈然后输出就行了吗?但仔细思考后发现遗漏了输入输出随机交替出现时产生的问题。不过还是很简单的,大...原创 2019-03-12 16:30:06 · 68 阅读 · 0 评论 -
Z-buffer算法 及 点与多边形的包含性检测算法
做题时遇到了z-buffer算法,好久前看过这个算法但好久没遇到了,这次再遇见决定总结一下。转载自:https://www.cnblogs.com/cnblog-wuran/p/9830994.html1、Z缓冲区(Z-Buffer)算法1973年,犹他大学学生艾德·卡姆尔(Edwin Catmull)独 立开发出了能跟踪屏幕上每个像素深度的算法 Z-bufferZ-buffer让...转载 2019-03-17 12:36:29 · 1682 阅读 · 0 评论 -
蒙特卡罗算法
转载自:https://blog.csdn.net/zhou191954/article/details/110328651、蒙特卡罗算法 基本概述 蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法。传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地模拟实际物理过程,故解决问题与实际非常符合,可以得到很圆满...转载 2019-03-17 13:19:20 · 2322 阅读 · 2 评论 -
剑指Offer(六):旋转数组的最小数字[数组]
牛客网刷题笔记记录。参考自:https://cuijiahua.com/blog/2017/11/basis_6.html一.题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为...原创 2019-03-12 18:59:37 · 117 阅读 · 0 评论 -
剑指Offer(十):矩形覆盖[递归循环]
牛客网刷题笔记记录。参考自:https://cuijiahua.com/blog/2017/11/basis_9.html一.题目我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?二.思路分析以2x8的矩形为例。示意图如下:我们先把2x8的覆盖方法记为f(n)。用第一个1x2小矩阵覆盖大矩形的最左...原创 2019-03-21 16:18:29 · 102 阅读 · 0 评论 -
剑指Offer(七):裴波那契数列[递归]
牛客网刷题笔记记录。参考自:https://cuijiahua.com/blog/2017/11/basis_7.html一.题目大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39附:斐波那契数列公式为:二.思路分析一开始看到这道题目的分类是递归时就毫不犹豫的用递归写了,而且也确实非常好写,瞬间就写...原创 2019-03-13 15:33:24 · 219 阅读 · 0 评论 -
剑指Offer(十一):二进制中1的个数[位运算]
牛客网刷题笔记记录。参考自:https://cuijiahua.com/blog/2017/11/basis_11.html一.题目输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。二.思路分析 如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面...原创 2019-03-23 09:10:49 · 91 阅读 · 0 评论 -
霍夫变换
转载自:http://www.cnblogs.com/php-rearch/p/6760683.html一、霍夫变换(Hough) A-基本原理一条直线可由两个点A=(X1,Y1)和B=(X2,Y2)确定(笛卡尔坐标)另一方面,也可以写成关于(k,q)的函数表达式(霍夫空间):对应的变换可以通过图形直观表示:变换后的空间成为霍夫空间。即:笛卡尔坐标系中一条直线...转载 2019-03-27 15:34:02 · 1475 阅读 · 0 评论 -
剑指Offer(十二):数值的整数次方[代码的完整性]
牛客网刷题笔记记录。参考自:https://cuijiahua.com/blog/2017/11/basis_12.html一.题目给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。二.思路分析当底数为0时没有数学意义,直接返回0.当底数不为0时,讨论指数的情况:如果指数大于0则直接利用循环求得结果;指数等于0则结果为...原创 2019-05-30 15:20:38 · 90 阅读 · 0 评论 -
剑指Offer(十三):调整数组顺序使奇数位于偶数前面[数组]
牛客网刷题笔记记录。参考自:https://cuijiahua.com/blog/2017/11/basis_13.html一.题目输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。二.思路分析错误思路:一开始没看到“并保证奇数和奇数,偶数和偶数之间的相对位置不变。...原创 2019-05-30 16:04:24 · 124 阅读 · 0 评论 -
剑指Offer(十四):链表中倒数第k个结点[链表]
牛客网刷题笔记记录。参考自:https://cuijiahua.com/blog/2017/12/basis_14.html一.题目输入一个链表,输出该链表中倒数第k个结点。二.思路分析我们可以定义两个指针。第一个指针从链表的头指针开始遍历向前走k-1,第二个指针保持不动;从第k步开始,第二个指针也开始从链表的头指针开始遍历。由于两个指针的距离保持在k-1,当第一个(走在前面的)指...原创 2019-05-30 16:32:51 · 98 阅读 · 0 评论 -
剑指Offer(十五):反转链表[链表]
牛客网刷题笔记记录。参考自:https://cuijiahua.com/blog/2017/12/basis_15.html一.题目输入一个链表,反转链表后,输出新链表的表头。二.思路分析思路想明白了很简单,使用三个指针,分别指向当前遍历到的结点、它的前一个结点以及后一个结点。在遍历的时候,做当前结点的尾结点和前一个结点的替换。一开始可能感觉有点绕,如果没太理解代码用...原创 2019-06-03 20:21:49 · 79 阅读 · 0 评论 -
动态规划自学笔记(1)
声明:本文记录自某动态规划公开课内存,并非原创!动态规划题目特点1.计数:有多少种方式走到右下角 有多少种方式选出k个数使得和是Sum2.求最大最小值从左上角走到右小角路径的最大数字和 最长上升子序列长度3.求存在性取石子游戏,先手是否必胜 能不能选出K个数使得和是Sum例:有三种硬币,2元、5元、7元,每种硬币都有足够多;买一本书要27元;如何用最少的硬币组合...原创 2019-07-29 14:37:34 · 145 阅读 · 0 评论 -
剑指Offer(八):跳台阶[递归循环]
牛客网刷题笔记记录。参考自:https://cuijiahua.com/blog/2017/11/basis_8.html一.题目一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。二.思路分析首先我们考虑最简单的情况。如果只有1级台阶,那么显然只一种跳法。如果有2级台阶,那就有两种跳法:一种是分两次跳,每次跳...原创 2019-03-14 15:14:08 · 91 阅读 · 0 评论