自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 收藏
  • 关注

原创 OpenCV中Mat的使用

现象:浅拷贝为改图后,深拷贝为改图前。

2025-11-19 05:00:00 214

原创 Numpy获取子矩阵

取出一个坐标100到400的y轴,100到600的x轴的空间,将取出的背景设成红色,再在取出的空间中取一个10到200的y轴,10到200的x轴的空间,将这个空间设为绿色。img[y:y,x:x]这个就可以表示取出的空间,这个变量等于的是颜色。

2025-11-18 05:00:00 147

原创 Numpy的检索与赋值

通过修改img[count,100,1]中最后一个参数,可以改变线的颜色。通过改变255的值可以改变线的深浅。创建一个480×640 的全黑图像,循环200次,是在100列上出现一个长度为200的线。0是蓝线,1是绿线,2是红线。

2025-11-17 05:00:00 192

原创 Numpy在OpenCV中的应用

OpenCV会重新设置打印,与输出不同。解释为三行八列三层的矩阵,np.unit8是数据类型。5和7设置矩阵大小,k设置1的起点。

2025-11-16 16:00:00 274

原创 OpenCV中色彩空间的应用

OpenCV更常用HSV/HSB/HSL。Saturation:饱和度。OpenCV默认使用BGR。RGB:人眼的色彩空间。

2025-11-15 06:00:00 175

原创 OpenCV中TrackBar控件

用来在指定窗口里“挂”一条可拖动的滑块(Trackbar)。借助它,你可以在调试图像处理程序时实时改变某个参数(阈值、亮度、颜色范围等),并立即看到效果,而无需反复改代码、重新运行。成对出现:前者负责“创建”,后者负责“取值”。只要知道滑块名字和它所在的窗口名字,就能在任何时刻拿到滑块的整数值。,让用户用鼠标拖动滑块,实时把 0~N 的整数值传给你的程序。是 OpenCV 提供的唯一一条“读取滑块当前位置”的函数。Trackbar(轨迹条/滑块)是 OpenCV 提供的。

2025-11-14 21:31:39 245

原创 按钮控制数码管显示(中断实现)

若中断嵌套层数 ≤3,4 组足够;using 0 → 第 0 区(地址 00H~07H)using 1 → 第 1 区(地址 08H~0FH)using 2 → 第 2 区(地址 10H~17H)using 3 → 第 3 区(地址 18H~1FH)中断的本质就是当中断口被下降沿触发后进入中断函数。写一个程序,让按键S1按下后,数码管的数值加一。中断方式实现时,要先打开总中断开关(EA=1)。这四个数,对应 8051 内部的。(每组 8 字节 R0~R7)。using后面只能写。(1→2→3 轮着用)。

2025-11-02 23:39:06 379

原创 集成运算放大器(反向加法,减法)

结论:输出电压=-(R4/R1*V1+R4/R2*V2+R4/R3*V3)。平衡电阻R4等于R1和R2和R3的并联电压。结论:减法运算电路分为三种不同情况,第一种情况为R1=R2,R5=R4,这种电路为差分电路。第二种情况为R1=R2=R4=R5,这种情况经常用做测量放大电路。第三种情况为R2=R5,R1=R4。

2025-08-17 23:47:34 612

原创 集成运算放大器(反向比例,同相比例)

由于放大器的最大输出电压取决于供电电压,所以如果R2为7k时,会导致失真。结论:放大倍数为-R2/R1。R3的大小约等于R1与R2的并联电阻。结论:放大倍数为1+R2/R1。R3约等于R1与R2的并联电阻值。反馈直接接反向输入端。

2025-08-17 00:10:16 452

原创 集成稳压电源设计

(经过电容输出的电压为1.2U0,选择耐压值大于1.1根号二)U0为变压器副线圈输出的有效值。对于稳压芯片LM337:输出电压最大为-40V,输出电流-1.25~-37V。C3和C6的作用:去耦电容,大电容滤除低频干扰,储能,小电容滤除高频干扰。对于稳压芯片LM317:输入电压最大为40V,输出电流为1.25~37V。在设计电路时要留有余量,符合正负3V到正负12V的可调电源。变压器:变压电压大于稳压块电压,电流大于需要的输出电流。输入电压最大值为220V,输出为5V稳定电压。三端正电压稳压电路,

2025-08-16 00:33:23 244

原创 优先队列,链表优化

操作逻辑:循环操作次数,但这里不能简单的进行K--,因为如果取出的堆顶元素不等于堆顶元素下标值所对应的原数组元素,这是因为每一次操作时,数组中的元素的值会发生变化,所以变化后的元素值和下标需要push进堆中重新维护,这次操作不计入操作次数,所以操作次数是否减少要进行这个判断。对下标的更改:当前节点的左节点的右节点等于当前节点的右节点,当前节点的右节点的左节点等于当前节点的左节点(删节点通用)。对值更改:如果节点的左右节点没有越界,节点值加上堆顶值。

2025-08-09 22:30:00 203

原创 动态规划(相同地方不同状态)

第一种情况:变成第一种图形情况的可能情况,在i-1列时就为第一种图形情况(在放一个竖放的图形),在i-2列时为第一种图形情况(放两个横放的图形),在i-1列时为第二种图形的情况,在i-1列时为第三种图形情况。第二种情况:变成第二种图形情况的可能情况,在i-1列时为第三种图形情况(将第一个图形放在上面空格处),在i-2列时为第一种图形情况。设dp[i][j]表示在列数为i时,此时图形的状况为j时的方案数,j的大小为0,1,2三种图形情况。

2025-08-09 20:00:00 235

原创 动态规划(三维)直接按照题目条件

第一种情况:dp[i][j][k]时的方案总数等于此时的方案总数加上遇到店减一时且酒数减半的方案数(这种情况的限定条件是店数大于0,k是2的倍数,防止数组错误)第二种情况:dp[i][j][k]时的方案总数等于此时的方案总数加上遇到花减一且酒数加一的方案数(这种情况的限定条件是j与k都大于0)题目中有三个变化量,店数,花数,酒数,设dp[i][j][k]表示在遇到i个店,j个花后还剩k个酒的方案数。

2025-08-09 19:15:00 170

原创 贪心(set维护)

思路就是将每一个竹子都砍到1,统计每一次砍后的长度,直到到1。当遇到后面的竹子砍后的值没有与之前的相同,这时可以对结果加一。如果遇到相同的高度,按照题意就可以与前面的竹子一块砍去。定义数组pre存储已经处理过的竹子的长度,cur数组储存当前处理的这个竹子的长度。使用set类型更符合题意。sqrtl函数:sqrtl。

2025-08-08 22:15:00 200

原创 图论(邻接表)DFS

递归逻辑:从当前节点向后遍历,edge[u]这个邻接表存储了当前节点连接的子节点,遍历每一个子节点(注意:i的类型要为size_t,要与edge[u].size()一致)。当前节点的子节点为edge[u][i].first(表示u节点出发的第i条边,first表示节点值,second表示边权),如果发现子节点等于父节点,走回头路了,就结束这次循环,换下一个节点,如果子节点可以到达目标终点,则向上返回true,如果所有条件都没有满足,则返回false。终止条件:当当前节点到达终点,st数组存储路径和。

2025-08-06 22:30:00 398

原创 二分查找(基础)

将范围内的中间值作为结果,在确定最小值时,如果在中间值符合题目要求,就要在左边界到中间值这个范围内进行搜索。反之,则在另一个范围内搜索。在确定最小值时则正好相反。通过数学知识不难想出V的最大值与最小值在一定的范围内,找出这个范围再用二分查找的方法找到最大值与最小值。

2025-08-01 19:30:00 209

原创 差分数组前缀和优化,降低时间复杂度

差分数组的统计:由于这道题的数据量大,采用map统计边界值,节省时间,而且map会从小到大排序。每一个范围的变化数是相同的,所以统计这个范围的长度,如果符合题意,结果就是累加这个范围长度。定义一个diff差分数组,对于一段范围的左右边界,对左边界的差分数组加一,表示这个位置及后面的位置的值都加一,对右边界加一的差分数组减一,表示这个位置后的值都减一。注意:要想知道每一个点变化了多少,就是累加map中的值的数,由于范围内的值等于零,所以范围内的变化数是相同的。可以使用差分数组进行统计,最后统计结果。

2025-07-30 22:15:00 193

原创 图论(BFS)构造邻接表(运用队列实现搜索)

令队列中存入的第一个根节点是1,从头开始遍历队列中每一个节点,队列中依次存入的是根节点的子节点。dis[i]存储的是节点i到节点1的距离,所以最后输出的是dis[n]。为了寻找最优路径,要处理一种情况,在当前节点的孩子节点也是当前节点的根节点的孩子节点时,不对这个子节点进行路径更改,也不将子节点入队。qaq数组存储权值的节点值,初始化时通过memset函数将数组初始化成-1,从后向前遍历数组,如果qaq被赋值,说明在这个节点后有节点的权值与这个节点相同,将这个节点的孩子节点赋值为上一个节点值。

2025-07-28 20:15:00 508

原创 哈希表应用(map,set共同作用)

接下来的问题就是如何实现这个滑动窗口,先将0到k的数字和个数存入map中,再通过向后滑动判断出去的数字与进入的数字,根据不同情况更改set中的值,但别忘了判断结束后也要更改map中的值。这道题就是将滑动窗口大小为k的数字与个数存入map中,再将map中值为1的数字存入set中。键与值的类型都为int,键指的是数字,值指的是数字出现的个数。map<int,int>m是。set<int>s是。

2025-07-27 21:45:00 394

原创 计数dp(基础)

因为每次字符串的长度加一后,组合种类的数量等于原来这个字母开头的种类累加上长度减一后从这个字母开始向后的每一个字母的种类数。初始化dp数组,字符串长度为1的组合种类每一个字母都唯一,其他dp数组初始化为0,可以由字符串长度为1的状态向后推。定义一个dp[i][j]二维数组,i代表字符串的长度,j代表开头字母(0代表a,1代表e.......)。

2025-07-26 22:15:00 277

原创 大根堆,小根堆,双指针

当差值大于一时,循环的将j指针指向的数组值加入maxDel和minDel(因为不确定加入的值为多大),将j指针向后移一位。同时判断移除的数影响最大值还是最小值,如果影响最大值,则按照maxDel中数的多少pop出大根堆中的元素。最后输出结果为滑动窗口的最大值,滑动窗口的大小为i-j+1。i,j初始指向第一个元素,i依次向后遍历,同时加入到大根堆和小根堆中,将这两个堆头元素相减得到最大值减最小值。要想找到滑动窗口的最大值,想到运用双指针实现滑动窗口,运用大根堆小根堆求出每一个窗口的最大值,最小值。

2025-07-21 21:00:00 154

原创 字符串问题(贪心)

要想得到的数最小,可以就是让位数越大的数的值越小就行,也就是从头开始向后遍历,每次对比最大位数的值与他下一位的值,将最小的数值放在最大位上。注意:操作时别忘了将字符串的长度减一,同时还要跳出循环,这样才能对新的字符串从头开始遍历找到最小值,而且保证了去除了k个数。输出:注意删掉前导0,找到字符串中第一次出现非零数时的位数,输出时从这一位开始输出。由于数的位数很多,所以可以采用字符串的方式统计。

2025-07-21 16:12:52 137

原创 石子问题(区间dp)

因为在石子问题中,总值=之前的值+当前的值,当前的值是确定的,通过前面算的累加数组得到起点到终点的值sum[j]-sum[i-1]。之前的值就通过枚举中间值k来表示。枚举区间大小,再枚举起点,这样终点的值可以被确定。注意:因为题目是环形数组,所以结果不能直接输出dp[1][j]。初始化dp数组,在区间范围为0时,dp数组大小为0。将数组的大小扩大一倍(即把原数组复制一份接在后面),将环形问题转换成线性问题解决。定义dp[i][j]数组表示将i到j之一段石子合并成一堆时的得分。

2025-07-19 21:45:00 194

原创 贪心算法(排序)

定义结构体变量存储两个成员,一个是开始时间,一个是结束时间。定义一个结构体类型的数组,让这个数组按结束时间由小到大的顺序排序,遍历整个数组,如果遍历到的数组值大于上一次遍历数组的结束时间,结果加1。要想安排最多的活动,就要让结束时间越早越好而且还能接上后面的活动。

2025-07-17 22:00:00 401

原创 数据结构:栈(区间问题)

当输入的opt为2时,要考虑k的两种情况:一种可能小于栈顶范围,一种大于栈顶范围。当大于栈顶范围时,只要将栈顶范围的和求出后,再pop出后,反复多次还会回到第一种情况中。在两种条件外套上大循环,当是第一种情况,循环停止,第二种情况时,将k减去pop出的节点的大小,再进入循环。定义一个结构体MOOD变量,含有ll与rr两个成员。定义一个st栈保存节点(栈内节点可以是一个数也可以是一个范围),每次。对象压栈,也就是栈内的每个节点都有两个成员。当输入的opt为1时,将范围作为节点压入栈中。

2025-07-16 22:30:00 344

原创 背包问题(包括路径统计)

01背包问题,将时间看作背包能装的最大重量,将重要度看作物品价值。这道题需要额外统计出取的物品的路径,所以不能直接得取与不取之间的最大值,需要在取物品时将路径数组path变为1,这样数组中值为一的就是选取的物。接下来遍历重量与价值,将取得物的编号统计在cnt数组中,最后遍历cnt数组。

2025-07-15 22:00:00 158

原创 动态规划(背包dp)

01背包主要涉及取与不取的问题,不取时为dp[j],取时为dp[j-food[i]]+1,在两者之间取得最大值。

2025-07-15 17:28:56 487

原创 字符串问题(哈希表解决)

定义一个map集合,表示每一种字符串出现的次数。利用substr()函数从i开始向后取2个元素,再将这个字符串出现的次数加一。遍历哈希表找到出现次数的最大值,也就是值(p.second())的最大值,和这个键值所对应的字符串。暴力解决:定义一个二维数组,横坐标代表长度为二的字符串的第一个字母,纵坐标指的是第二个字母。遍历所给字符串,每两个两个遍历,最后取得二维数组的最大值。最后从数组中将这个最大值所对应的字符串找出来。给你一个字符串,找出现次数最多的长度为2的子串。

2025-07-13 23:00:00 202

原创 相量法正弦稳态电路的分析(面向题目)

电感的电压超前于90度,相量角相加得到U2,又因为电容的电流超前于电压90度,所以电容的电流的相量角为135度(初始化电阻的电流的相量角为0度)。负载元件的功率因数角会超前或滞后于电流电压,因为负载元件不是独立元件,但第三条支路中,电容的电流超前于电压90度。视在功率(总电压与总电流相乘)的平方等于有功功率(电路消耗的功率)的平方加上无功功率的平方。为了使总电压与总电流同相,就是使总电流的相量角为0,也就是虚部的值为0。对于电感,电压超前与电流90度。初始化的向量角的确定,以一直原件的电流或电压为最好。

2025-05-29 21:08:51 987

原创 组合问题(分割字符串)

单层递归逻辑:从上一层分割的第startIndex元素开始,向后遍历直到结尾,判断是否为回文子串,如果是,则提取从startIndex开始后i-startIndex+1个元素(std::substr()函数:前一个值值从字符串的第几个元素开始取元素,后一个值指取几个元素),将所得元素放入path数组中,再向下一层递归,i的值加一,也就是将分割的值向后进一位。判断回文子串逻辑,定义一个返回值是布尔值的函数,传入字符串,分割开始值和字符串结尾值,遍历字符串开始和字符串结束是否相同,相同则为回味回文子串。

2025-05-22 18:39:43 356

原创 组合问题(去重)

元素的选取还是只取一次,构造树形结构,但不同的是要将初始数组排序,这样可以筛选出重复项,定义used数组,bool类型的,记录此元素是否被取过,如果两次取到元素相同,而且前一次取的used值为false则要进行去重。其他逻辑与组合问题的逻辑一致,需要添加的是used数组的初始化,used的单层递归逻辑和回溯的逻辑。

2025-05-15 17:41:46 210

原创 组合问题(多条件)

单层递归逻辑:定义一个数startIndex来统计遍历到数组的哪一个数,遍历这个数本身到最后的所有数,将遍历的数push入path数组中,定义sum统计遍历到现在的路径和,再向下进行递归,传入的startIndex值是i,因为搜索的值可以是自己本身。为了返回到上一层再进行新递归,所以要进行回溯算法,sum值减去加入的值,path数组pop出刚刚push进的值。这道题的搜索过程可以构造成树形结构,与其他组合问题不同的是可以再次搜索自己本身,最后找到路径和等于目标值。

2025-05-13 19:35:19 651

原创 组合问题(多集合)

单层递归逻辑:循环遍历每一个集合中所有的值,将取到的值加入到s字符串中,再递归循环digit字符串中下一个数,最后将加入的值pop出去,这样才能在下次循环中加入新的值,每一次循环完成后就形成一个完整的结果。终止条件:当index的值与字符串digits的大小相等时,也就时搜索路径到底了,到达叶子节点的情况,这时将s存储路径的值push进入到result结果数组中,最后return回上一层递归。定义s字符串存储搜索路径中的值,定义数组result来统计所有路径字符串的情况。

2025-05-12 19:26:24 318

原创 组合问题(二叉树,递归,回溯算法)

单层递归逻辑:从startIndex后循环遍历,将每一个循环到的值push进path数组中(path数组专门存放每一个叶子节点),递归函数,向下递归,startIndex的值也向下加一,每次函数循环结束时,还应将刚加进去的数pop出去,向前回溯,这样才能取全所有情况,如果不回溯,下一次循环的i值就会加入path数组中。终止条件:在每一次遍历到叶子节点时,path数组的大小为定义的k值,则将这次遍历到达数组push进结果数组。由于遍历到底,所以要返回到上一层递归。在组合数的情况下,选择前序遍历。

2025-05-11 17:16:20 276

原创 二叉搜索树的插入操作(递归遍历)

终止条件判断:如果遍历到的节点为空,说明遍历到的上一层节点为叶子节点,所以要将目标值定义成新节点再返回给上一层的那个节点,在最后返回的结果才能完整。从根节点开始向下遍历,如果遍历到的节点值大于目标值,则向左子树遍历;如果遍历到的节点值小于目标值,则向右子树遍历。由于二叉搜索树本身的性质,在进行插入节点的时候,可以将节点都同意插入到叶子节点上。

2025-05-08 19:43:54 310

原创 二叉搜索树的最近祖先(递归遍历)

单层递归逻辑:要想找到最近祖先,就是去找第一次到达q与p中间值的节点。由于二叉搜索树的特性,如果遍历到的节点值大于q与p,则向左面遍历;如果遍历到的节点值小于q与p,则向右面遍历。如果直接向下遍历,则会一直遍历左右子树的,遍历到的节点错过成为q与p祖先的情况。则要将递归遍历到的值返回给上一层。最后如果找到中间值点,则将遍历到的节点返回给上一层。终止条件:在遍历到最后时,如果还没有找到目标节点,到达空节点,则将空返回给上一层递归。

2025-05-04 23:31:17 340

原创 二叉树最近公共祖先(后序遍历,回溯算法)

回溯逻辑:如果节点的左节点为空但右节点不为空,则返回右节点给根节点;如果节点的右节点为空但左节点不为空,则返回左节点给根节点。如果左右都不为空,根节点不变,也就是将根节点返回给根节点,等待下一次循环对根节点的判断。判断符合题意条件:在遍历到的节点时,此节点与目标节点相同时,则返回节点给根节点,如果为空,则返回空。要想找二叉树的最近公共祖先,要从叶子节点开始遍历,最后返回给根节点,所以采用后序遍历的方法实现。单层递归逻辑:递归遍历节点的左右子节点,储存在left和right中。

2025-05-03 22:06:37 353 1

原创 二叉搜索树的判断(双指针解决)

要想要比较两个值的大小,应想到应用双指针的解法,采用中序遍历的方式,定义布尔值储存左子树的情况,将每一次的pre的值定义为前一次遍历到的节点,在左子树遍历结束,开始进行判断,如果前一次遍历到的左节点大于等于根节点的值,则返回false。最后如果左右子树都返回true,结果才为true。根据二叉搜索树的定义,左子树的所有值小于根节点的值,右子树的所有值大于根节点,采用中序遍历的方式,判断左子树的值是否小于根节点,如果小于根节点则返回true,大于则返回false。

2025-05-02 23:30:48 301

原创 二叉搜索树中的搜索(递归解决)

查找二叉搜索树中的值,要利用节点之间的大小关系。如果根节点为空,则返回值也为空。如果节点值为目标值,则返回这个节点,也就是以这个节点为根节点的二叉树。如果此时节点值小于目标值,则将节点向右递归遍历,大于目标值则向左遍历。都不符合说明二叉树中没有这个值,返回空。二叉搜索树(BST):以任意节点为根节点的数值大于其左子树所有节点的值,小于右子树所有节点的值。

2025-05-01 23:01:32 273

原创 二叉树的路径总和问题(递归遍历,回溯算法)

递归逻辑:在遍历到一个节点时,如果节点的左节点不为空,递归循环这个函数,如果函数的返回值为true,则说明在这条路径上是符合要求的。但在每次左右节点的判断之后,都要将减掉的值加回来,这样才能让count的值回溯回去,去遍历新路径的和。这道题要寻找是否有一个从根节点到叶子节点的路径的和与目标值相等,我们可以采用遍历二叉树来依次减掉所有的值来判断最后是否为0。递归的终止条件:如果遇到叶子节点(节点的左右子树都为空),而且count值减到0,则返回true,反之,则返回false。

2025-04-30 18:05:31 266

空空如也

空空如也

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

TA关注的人

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