- 博客(25)
- 收藏
- 关注
原创 放手一搏--倒计时三天
补充4 字符串操作删除字符串的最后一个“.”替换某个字母补充5 bitset 类别 方法/操作 描述 示例 头文件 必须包含此头文件 定义和初始化 创建一个长度为n的bitset,所有位初始化为0 用无符号长整数val的二进制表示初始化bitset 用字符串s初始化bitset,字符串
2025-09-17 16:55:42
941
原创 stl--保研机试极限复习
排序 用sort(v.begin(),v.end()) 默认是升序 降序可以 sort(v.rbegin(),v.rend())或者sort(v.begin(),v.end(),greater<int>())插入 删除用 push_back(),pop_back,或者 固定位置用 insert(),erase();resize()用于调整数组大小 size()获取数组大小 empty() 判断是否为空。二分查找 用 binary_search(v.begin(),v.end(),3)
2025-09-07 18:08:25
962
原创 动态规划Ⅰ---保研机试极限复习
这可能是保研前最后一次系统的学习动态规划了参考卡尔的动态规划五步曲(其实y总的也类似)1.确定dp数组(dp table)以及下标的含义2.确定递推公式3. dp数组如何初始化4.确定遍历顺序5.举例推导dp数组dp[i]的含义:n对应的斐波那契数为dp[n]递推公式:dp[i]=dp[i-1]+dp[i-2];dp数组如何初始化:dp[0]=0,dp[1]=1;
2025-08-17 01:57:59
1178
原创 排序总结---保研机试极限复习
int age;// 按年龄升序排序});return 0;Lambda 表达式允许在调用std::sort时直接定义比较逻辑,无需预先定义函数或重载运算符Lambda 作为比较函数,返回true时第一个参数排在第二个参数之前// 降序:a > b 时 a 排在前面});// 结果:9, 5, 2, 1我们这样记忆,传入a和b 如果返回 a>b 大于号就代表前面的数大于后面的数,是降序排序如果返回a<b,小于号就代表前面的数小于后面的数,升序排序模板。
2025-08-13 18:15:59
617
原创 前缀和+二分查找---保研机试极限复习
34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)很简单的一道题,被平台恶心了一个半小时,其实我的代码已经决定了不会出现越界,该死的平台一直报错,一定要在输出的时候写好判断才能运行public://这不就是学二分的第一道例题吗,求左边的点和右边的点int l1=0;int r1=n-1;//第一个位置,(二分求右边的点)int l2=0;int r2=n-1;
2025-07-17 18:02:31
615
原创 模拟+贪心---保研机试极限复习
由于我们不需要正好跳到最后一个位置,所以其实没必要想的太复杂,就是能跳多远跳多远,看看能不能跳到最后一个。本质上还是之前的双指针滑动窗口的思想,但是现在不太记得了,就用贪心思想理解吧,贪心思想就是说,如果。事实上这就是这道题的标准解法,只是被封装好了,我们要了解一下底层原理co。从贪心角度看,和上面那题思想一样,因为再本质一些可以从滑动窗口角度看。之前是用滑动窗口的思想理解,现在用贪心思想理解。之前了解过的全排列函数很简单就可以解决。
2025-07-15 19:11:39
373
原创 数学---保研机试极限复习
首先找到规律,其实也是数学式子,第一行变第n列,然后把这个式子用数组表示,表示完之后,有几种选择,如果允许额外空间,直接带入式子很简单,如果不允许额外空间,可以考虑翻转数组看看能不能通过上下对角线左右翻转得到式子。我的思路就是转换成一个简单的数学问题2=,搞清楚n和N,以及我们要求得的待删除节点的前驱节点的位置,他们之间的一个数学算式的关系就好了。我的方法是用哈希表,因为这个节点有两个指针指向他,其他的都只有一个,注意需要创建哑节点,因为可能指向头结点,当然直接哈希表存储节点也可以。
2025-07-14 06:41:26
387
原创 模型常见损失函数、softmax、交叉熵损失函数
在模型的训练过程中,最重要的是在计算出参数的梯度值以后,利用梯度下降算法对模型参数进行更新。如果要得到梯度值,必须先定义损失函数。损失函数主要用于衡量模型的预测值与实际值之间的误差,然后模型根据这个损失值调整参数以减小误差,从而找到最优参数值。在深度学习中,根据完成的任务,损失函数可分为两类,第一类为用于回归任务的损失函数,第二类为用于分类任务的损失函数。例如,若有 3 个类别且真实类别为第 2 类,则 y=[0,1,0]。(未归一化的原始分数),记为 z=[z1,z2,...,zC]。
2025-05-24 17:42:50
1136
原创 机器学习模型度量指标(混淆矩阵、准确率、精确率、召回率、F1分数、ROC曲线、AUC、平均精度均值)
用于展示多分类模型预测结果与真实标签的对应关系矩阵,直观反映各类别的预测正确 / 错误情况。
2025-05-24 16:38:08
1307
原创 LeetCode Hot100 (2、3、4、5、6、8、9、12)
也就是说,对于一个数组或者一个串,我们如果暴力枚举,需要依次遍历所有字串,然后再判断满不满足条件,这个复杂度大约在三次方。以上题为例子,当 (0,2)没有重复时,(1,2)(2,2)都没有重复(小于0,2的长度)当(0,3)有重复时 (0,4)(0,5)(0,6)(0,7)都有重复,这些都可以不用判断。2、下一根柱子的高度比现在低,高度比原来的最小值还小,最大水量比原来小。2、下一根柱子的高度比现在低,高度比原来的最小值还小,最大水量比原来小。基于上面的思想,我们可以得到一个滑动窗口的模板。
2025-05-16 00:21:46
1143
原创 LeetCode Hot100 (1/100)
数组作为函数参数传递时会退化为指针,此时。 初始化对象,是 C++11 引入的。在 C++ 中,哈希表主要通过。返回指针大小而非数组大小。,适用于所有类型。
2025-05-14 21:03:47
892
原创 数学知识集锦
我们知道如果a对p取模,只要满足a p互质就有逆元,满足p是质数就能用费马小定理,也就是可以用快速幂求解,题目中是对一个很大的·质数取模所以满足条件,如何对阶乘求逆元,这里用了一个递推式,相当于对i求逆元再和i-1的阶乘的逆元相乘。有一个细节,i开始筛的时候是从i*i开始的,比如此时i=3,遍历筛倍数就从9开始,9,12,15...,可以降低重复。x是i的约数,那么i/x也是i的约数,我们循环的时候可以一起加入约数集合,这样可以只循环根号n。其中每个质数都是这个合数的因数,叫做质因数。
2025-04-02 20:33:47
2142
原创 线性DP--3.30
状态划分为1维,集合表示为以第i个数结尾的上升子序列,状态计算的集合划分可以以该子序列的倒数第二个数为哪个进行划分(不一定全部存在)当扫描到4的时候 我们添加长度,序列长度为3的上升子序列末尾是4 (1 2 4)当扫描到4的时候,我们知道,序列长度为2的上升子序列末尾元素是4(1 4)当扫描到3的时候,我们将序列长度为2的上升子序列末尾元素改为3 (1 3)当扫描到2的时候我们将序列长度为2的上升子序列末尾元素改为2 (1 2)当扫描到1的时候,我们知道,序列长度为1的上升子序列末尾元素是1。
2025-03-31 10:48:01
686
原创 动态规划学习---背包问题
2025---3.27,背包问题专练DP问题的分析我们采用特定的方法这个分析方法我们可以专门来学习一下链接:https://www.bilibili.com/video/BV1X741127ZM。
2025-03-30 17:09:50
746
原创 树和图的存储
邻接矩阵(少)(用2维数组q[a][b]代表a到b之间有一条边,适合稠密矩阵而且不能存储重边)和邻接表(类似哈希表里的拉链法),如图。图分为有向图和无向图,对于无向图我们可以看做有向图的拓展,比如有向图 a 和b 直接有通路。为每个点开了一个单链表,如果想开一个新的边,通常在头部插入(因为有一个头结点数组,方便)我们存储 a到b 无向图只要同时存储 a到b和b到a就行。树是一种特殊的图--无环联通图。所以我们只要考虑图的存储。所以我们只需要研究有向图。有向图的存储一般有两大类。
2025-03-22 20:27:32
240
原创 查缺补漏--3.22
很久没有认真写算法了,最近状态低迷,学校发了几个比赛通知,但是算法没怎么学都没参加,是时候认真赶紧学完基础课了简单来说under_map, 就是存储键值对,并且因为底层是哈希表,所以存储的键值对是无序的,这样也导致查询更快。
2025-03-22 20:26:24
393
原创 并查集+堆排序
那么这样是否会有问题呢,我们看看上浮的路径,如果该节点要上浮,那么就是与他的父节点进行交换,而这个父节点一定小于,已经存在或者不存在的左孩子,也就是说交换后原父节点的位置变成了这个数,父节点位于左孩子处,或位于右孩子处,但左孩子会比父节点大,然后如果这个节点还要继续上浮,那么就会交换一个原来父节点的父节点下来,这个点比父节点小,一定也比现在的左孩子小,所以直接满足条件,一直往上上浮同理。具体思路是在数组最末端添加一个数,然后这个数要与自己的父节点(i/2)比较,如果小于父节点就与父节点交换,然后递归处理。
2025-03-11 19:22:33
947
原创 详解滑动窗口以及KMP算法
重新梳理一下,首先我们怎么模拟这个滑动窗口(大小为k),滑动窗口的尾端是从头到尾遍历数组的,所以我们在最外面设置循环从i到n,滑动窗口的头怎么模拟呢,实际上,我们并没有模拟滑动窗口头部的移动,但是每次i往后移,也就是往窗口里添加元素的时候,都会判断一下,此时的最小值是否出了窗口,也就是说,我们只关心当前答案是否出了窗口,因为,对于我们的输出来说,只需要确定最小值是否出窗口,如果出了最小值就要更换,如果没出,接下来都输出这一段最小值,我们再结合图表理解一下。
2025-03-07 17:00:45
1074
原创 模拟链表+模拟栈+模拟队列+单调栈
2025.3.6单链表用指针加结构体实现链表 例如int val;//这个操作非常慢面试常问,笔试基本不用用数组模拟链表,单链表里,常用的是邻接表,用来存储图和树,双链表常用来优化某些题单链表的结构 如图有一个头结点,头结点初始指向空集,每个节点存储自己的值和next指针用数组模拟的话,需要两个数组,e[N],ne[N];表示值和next,他们之间通过数组下标关联起来,空节点下标用-1表示。
2025-03-07 09:45:15
961
原创 双指针-三个例题
首先,无论数据是否有唯一解,相加等于一个定值都是,一个从最小的往最大的移动,一个最大的往最小的移动,如果有唯一解,可以在找到这个解之后直接退出循环,如果没有说唯一解,可以在遍历完其中一个数组之后结束循环。比较简单的想法,创建一个动态数组,然后每次j往后走就遍历数组,如果没有重复的就继续往后走,并且将当前元素加入动态数组,如果重复了,就结束遍历,i从下一位开始。具体思路就是,i指向数组a的最小值,j指向数组b的最大值,判断指向的两个数的和,如果大于x,j往前移,如果小于x,i往后移。
2025-03-04 20:58:11
614
原创 浮点数二分+vector基础+高精度加减+前缀和与差分
假设上面是原矩阵下面是差分矩阵,下面矩阵蓝色部分的和等于原矩阵蓝色部分 ,假设差分矩阵的某个位置加上了c例如绿色部分,那么由差分矩阵构建原矩阵时,会发现,差分矩阵绿色的部分会把(3,4)囊括进去,直观的说,就是右下角部分,那么对于原矩阵,原矩阵绿色部分都会加上这个数c。高精度减法的思路和加法类似,不过是需要向上借位,借位操作很简单,同样用t表示,最多借一位 0-9+10=1,流程只需要正常减,如果得出来是负数就加10,且t=1,下一位减的时候要多减1。
2025-03-03 21:14:54
2173
原创 详解整数二分
这个时候来考虑mid的情况,是否需要+1,边界值分析考虑极端情况,假设只剩下两个数,(l+r)/2=l,即mid=l,另一种情况是l=r,如果mid=(l+r)/2,此时求mid=l,若符合条件,更新l=mid,新的l和r不变,陷入死循环,当然,如果只剩下两个点,左边的点一定是符合条件的,所以一定会陷入死循环。记忆:如果边界条件是 l=mid,r=mid-1,那么mid=(l+r+1)/2,就是有三个式子里有一个+1,或者,有一个-1,就有一个+1;
2025-03-02 01:48:46
1005
原创 C++基础语法+快排+第k个数+归并+逆序对
2025.2.28---打卡第一天,开始学习算法准备机试和蓝桥杯算法学习计划--acwing基础题加LeetCode hot100本人算法小白,仅在一年前准备蓝桥杯时学过半个多月算法,帖子仅仅用来复盘和监督 有兴趣的朋友可以一起交流,相互监督。
2025-02-28 21:19:33
772
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅