10 2020 档案
摘要:二分法有点类似于数学中的零点定理 如果单调直线区间左右异号,那么零点一定在这个区间内 二分检测的思想就是吧原数组的起点和终点当作区间的界,然后找中点,如果中点元素大于要找的数字,且数组是升序数组,那么中点就变成了右界,反之,重点变成左界,循环操作,直到左右界重合 代码 #include<iostre
阅读全文
摘要:原理有点太绕了,找时间补上,先贴代码 #include<iostream> #include<string> using namespace std; int* Next; int KMP(char* Str, char* SubStr); void NextTable(char* Str); in
阅读全文
摘要:个人理解,用一句话来概括多态就是:一个接口(函数)能实现不同种方法 C++的多态分为静态多态和动态多态 静态多态:指的就是重载(编译的时候函数地址就已经确定) 动态多态:继承并重写基类的虚函数 关于静态多态(重载),比较简单,下面用两段代码来演示一下 #include<iostream> #incl
阅读全文
摘要:对撞指针 给定一个有序整型数组和一个整数target,在其中寻找两个元素,十其和为target,返回这两个数的索引 如:[2,7,11,15],target=9 输出 [1,2] 最直接的解法就是暴力解法,双层遍历,这样他的时间复杂度就是O(n^2) 但是暴力解法没有利用他的已知条件,就是有序 双指
阅读全文
摘要:连通域分析其实是一个路径搜索问题,搜索方式就看联通的规则(4联通:上下左右算是联通,8联通:上下左右还有四个对角) 01矩阵背景是0,黑色的,有色区域是1,白色的,从图像的左上角(最外围的边要去掉)进行遍历,将找到的第一个值为1的像素点作为起点,对他进行连通域搜寻,将搜寻到的整个连通域内的像素点标为
阅读全文
摘要:属性->C++->语言->符合模式->否
阅读全文
摘要:其实这是一个很深邃的问题.在c/c++中规定:左操作数必须是一个左值.a++在c/c++中的实现是:{int tmp=a;a=a+1;return tmp;}这里的tmp为一个临时变量,是一个右值,对它赋值毫无意义.++a在c/c++中的实现是:{a=a+1;return a;}a为一个左值,可以赋
阅读全文
摘要:给定一个整型数组和一个数字s,找到数组中的最短连续子数组,使得连续子数组的和sum>=s,返回这个最短连续子数组的长度值 如给定[2,3,1,2,4,3],s=7 答案为[4,3],返回2 第一种解法就是暴力解法,采用双循环来遍历所有的子数组,代码如下 #include<iostream> usin
阅读全文
摘要:把时间戳加到图像的前几个像素,前三位是小时,分钟,秒,后两位是毫秒,因为毫秒是四位数 time_t t=time(NULL); std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds> tp = std
阅读全文
摘要:二叉堆的本质是完全二叉树 大顶堆:每个节点的值都大于他的子节点 小顶堆:每个节点的值都小于他的子节点 二叉堆的根节点就是他的堆顶 堆的存储结构 虽然堆的数据结构是树,但是它并不是以链式结构存储的,而是顺序存储(数组) 通过数组下标可以定位父亲节点或者孩子节点,堆中的最后一个父亲节点就是(数组长度-1
阅读全文
摘要:快速排序类似于冒泡排序,冒泡排序是在一次排序中找出最大或者最小的数,然后将它冒出,快速排序是依次排序找出基准数的位置(或者说确定所有数的性质,大于基准数或者小于基准数),一般取数组第一个元素为基准数 过程是先确定一个基准数,然后经过一次排序,将所有大于基准的数放到基准数右边,所有小于基准数的都放大基
阅读全文