- 博客(23)
- 收藏
- 关注
原创 字符串和KMP
next[0] = -1:子串下标为0的字符,前面没有任何字符,约定为-1;next[1] = 0:子串下标为1的字符,前面只有1个字符(t[0]),没有前缀和后缀,最长相等前后缀长度为0;对于j ≥ 2,next[j] = 子串t[0..j-1]的最长相等前后缀长度。compareString:逐字符对比,判断字符串相等/大小,核心是处理“字符串结尾”和“字符差值”;getSubstring:截取子串,核心是判断参数合法性,避免数组越界,手动加'\0';
2026-02-11 14:45:59
606
1
原创 王道考研C语言第五周
简单来说就是自己调用自己,把大问题分解成小问题,有点像数学归纳法,函数的的出口就是n=1、n=2这样容易证明的初始条件,假设到k已经成立了,推出k+1成立,递归相对于枚举的话容易写一点,但是递归的时间复杂度难说递归就是在函数定义里面直接或者间接调用本函数通常使用递归的代码性能会弱于循环的代码,因为函数调用的时候会申请栈帧。
2026-02-03 14:00:41
432
原创 考研王道C语言第四周作业
/ 替换最后一个字符printf("去除换行符后: \"%s\"\n", str);// 输出: "World"return 0;C语言学习 | week04_字符串排序输出。
2026-02-02 09:14:18
444
原创 考研之王道C语言第三周
函数的声明是告诉主调函数存在这样的一个函数,可以声明写在前面,定义写在后面函数的声明要求有返回值类型,函数名称,形式参数int mainreturn 0;函数的声明可以写很多次,但是定义只能有一次C语言中函数是放在栈当中的所以函数是First In Last Out;同时逐过程是直接完成函数,想要看到函数内部细节要用逐步有序性,内存连续性,首地址时间复杂度为1,静态的,固定的,索引从0开始【】在定义语句中是实现数组的初始化,在非定义语句中是通过首地址和sizeof(数据类型)来访问数组元素;
2026-01-31 10:48:46
819
原创 考研之C语言第二周作业
相同点是内存中的数都发生了加一,但是前置++是先赋值再++,后置是先自增再赋值。这个就是枚举从一到这个数依次写出来就行。在下面的天数问题中有所体现。
2026-01-25 19:57:11
407
原创 C语言为什么1除以2等于0?常见C语言问题,大一必看!
刚接触 C 语言的小伙伴甚至一些大三老油条大概率会遇到一个 “反直觉” 的问题:明明数学里 1 除以 2 等于 0.5,可在 C 语言里敲出1/2,运行结果却偏偏是 0。这不是 C 语言算错了,而是它 “算数的规矩” 和我们日常的数学思维不一样 —— 今天就用大白话把这个问题讲透,保证新手也能秒懂。
2026-01-09 17:14:45
177
原创 彻底弄懂CBAM:让神经网络学会“看重点“的视觉注意力机制
特征通道是语义检测器(猫耳朵/狗尾巴通道真实存在)注意力是资源分配器(有限算力聚焦关键信息)graph LRA[原始图像] --> B[基础特征提取]B --> C[通道注意力:选特征]C --> D[空间注意力:定位置]D --> E[精准识别]实战建议在下载预训练CBAM模型使用Gradio快速搭建可视化Demo尝试在自定义数据上微调CBAM模块**理解CBAM,你就拿到了打开视觉深度学习新世界的钥匙!**🔑。
2025-10-24 19:47:18
1042
原创 深度学习SE,CBAM,ECA,SimAM模块汇总之SE
SE模块全称"Squeeze-and-Excitation"(压缩-激励)模块,是深度学习中的一种注意力机制,最早由Momenta公司(现并入商汤科技)在2017年提出。它的核心思想是让网络学会"关注"哪些通道(channel)的特征更重要。想象一下你在看一幅画时,眼睛会不自觉地聚焦在重要的部分上,SE模块就是让神经网络具备这种"选择性注意"的能力。
2025-10-24 18:05:05
1336
原创 超详细用栈实现队列思路
所以这种实现完全支持 “pop 后再 push” 的操作,且能保证队列的 “先进先出” 特性不变。push(x) -- 将一个元素放入队列的尾部。peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空。pop() -- 从队列首部移除元素。)实现队列(Queue)的经典解法,这段代码是用两个栈(
2025-09-05 16:11:24
590
原创 幼教办数据结构之队列!!看完不会我给你补
队列是一种常见的线性数据结构,遵循 **“先进先出(First In First Out,FIFO)”** 的原则,即最早进入队列的元素会最先被取出,类似于日常生活中排队的场景(先排队的人先处理)。队列是数据结构中的基础组件,理解其原理和实现方式,有助于更好地应对实际开发中的问题(如调度、缓冲、搜索等场景)。:数组长度固定,若不断出队会导致队头前的空间浪费(“假溢出”)。到达数组末尾时,重新指向开头,充分利用空间。),通过移动索引实现入队 / 出队。:用数组存储元素,记录队头索引((将数组首尾相连),当。
2025-09-05 15:12:55
499
原创 王道之栈与队列
栈是一种重要的线性数据结构,其核心特点是,即最后加入的元素最先被取出。InitStack(&S):初始化栈。构造一个空栈 S,分配内存空间。DestroyStack(&S):销毁栈。销毁并释放栈 S 所占用的内存空间。Push(&S, x):进栈。若栈 S 未满,则将 x 加入使其成为新的栈顶元素。Pop(&S, &x):出栈。若栈 S 非空,则弹出(删除)栈顶元素,并用 x 返回。GetTop(S, &x):读取栈顶元素。若栈 S 非空,则用 x 返回栈顶元素。
2025-09-04 21:08:54
438
原创 哈希表保姆级教程
哈希表通过“哈希函数”把数据映射到数组的特定位置,实现了快速的增删查改。核心是解决“哈希冲突”,常见方式是链表法。它就像一个“智能分类柜”,让你不用逐个翻找,而是直接定位到目标位置——这也是它成为编程中“效率神器”的原因。如果想进一步学习,可以尝试用代码实现简单哈希表(比如用Python的列表+链表处理冲突),直观感受它的工作过程~
2025-09-02 19:10:06
1935
原创 超详细从链表到面对对象
链表是一种线性数据结构,由(存储数据)通过(引用)连接而成,与数组相比,它的长度可以动态变化,插入 / 删除操作更灵活。面向对象编程的核心是节点类(Node)所以实际上我们对于链表的设计是在对Node结构的一系列操作,但是作为使用者不需要知道内部细节,所以我们要为使用者提供public的操作方法,但是方法的实现,离不开变量,所以我们对于操作中的关键变量赋予private属性,从而进行保护,
2025-08-13 20:50:30
1000
原创 链表教程一 看不会来砍我!!
什么是链表,链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。链表的入口节点称为链表的头结点也就是head看图:所以这种存储方式一定需要一个合适的容器去存储节点的data 和next指针。节点的数据结构包含两部分,第一部分是节点的数值,第二个是一个指针,是指向节点结构类型的指针,就像int*,char*是指向整数和字符的指针一样。data (节点自身的数值)
2025-08-09 18:37:34
516
原创 面试热题力扣59螺旋数组
本题的关键在于模拟顺时针螺旋填充的过程,但直接模拟容易出现边界条件混乱的问题。解决的核心是坚持循环不变量原则,即统一每条边的遍历规则(如左闭右开),确保代码逻辑一致。奇数中心单独填充。
2025-08-08 23:53:40
377
原创 力扣209.长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。
2025-08-07 21:47:34
546
原创 力扣977.有序数的平方
所以只要把刚开始的思路想到就迎刃而解了。但是有一个问题,最后left,right一定会相撞,所以如果while循环的条件是left<right那么就会有一个问题,相撞的值我们没办法录入。定义一个新数组result,和A数组一样的大小,让k指向result数组终止位置。那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。数组其实是有序的, 只不过负数平方之后可能成为最大数了。此时可以考虑双指针法了,i指向起始位置,j指向终止位置。
2025-08-07 20:15:45
316
原创 力扣27 移除元素
link给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。
2025-08-07 19:37:52
588
原创 二分法的强化(力扣34-查找元素的第一个最后一个位置)
34. 在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 $O(\log n)$ 的算法解决此问题吗?输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]
2025-07-30 12:39:44
1705
原创 二分法保姆级教学(看不懂来砍我)
首先看一个例子如果你瞎猜(1、2、3... 依次试),运气差可能要猜 100 次。但聪明的办法是先猜 50:如果我说「大了」,就知道答案在 1-49 之间;如果我说「小了」,就知道在 51-100 之间。每次都把范围砍一半,最多 7 次就能猜到(这就是「二分法」)所以不难看出二分法中间是把大的搜索范围通过序的关系给减少。所以这也就引出了二分法的前提条件:有序且无重复元素那么来看一个例子。
2025-07-28 22:19:46
2941
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅