- 博客(77)
- 收藏
- 关注
原创 【学习笔记】51单片机 LED灯闪烁,LED流水灯
如果每次要改变LED灯流水的速度,需要再次改变速度,重新改变速度去生成代码,非常麻烦,所以可以用另一个函数来解决这个问题。这样写我们实际的代码会产生流水的效果,但是这只是注释的改变,需要根据这个进制转换表将代码进行改变。可以看到预期成果是LED等持续亮暗亮暗,但实际效果却是只有一个LED灯持续亮光。它的原因是速度问题,单片机速度是MHz,而写的速度过快所以导致了这个结果。之后就可以看到以预期结果以500ms的速度看到LED灯的转换。依旧是建立正确的文件夹,把之前两次的代码填进去进行练习。
2026-10-24 20:36:09
25
原创 【题目练习】全排列Ⅱ
反过来:如果 used [i-1]==true,说明前面那个 1 正在当前 path 里面,那我现在选后面这个 1 是没问题的,比如 path=[1 (i=0)],现在选 i=1 的 1,得到 [1,1],这个是合法的。比如选第一个 1 和选第二个 1,最后拼出来都是 [1,1,2],这两个是一样的,题目要求不能重复输出。条件:nums[i] == nums[i-1] 并且 used[i-1] == false。四、正式开始回溯nums=[1,1,2],下标 0:1,下标 1:1,下标 2:2。
2026-10-24 19:03:48
41
原创 【题目练习】全排列
比如 path=[1,2,3],长度 = 3,满足条件,复制一份存到结果 res 里。比如 [1,2,3] 找到之后,我要退回去,把 3 拿掉,看看还有没有别的数字能放第三位;没有就继续退,把 2 拿掉,第三位换成 3,变成 [1,3,2]。3、我现在选了一部分数字,比如已经选了 [1,2],后面要接着选;如果这条路走到头了(选满 3 个),我要记下这个答案,然后退回去,换别的数字试。i=0:used [0]=true,已经选了,跳过,不能再拿 1;i=2:used [2]=false,可以拿 3。
2026-10-23 23:05:32
76
原创 【题目练习】外观数列
个数 2,字符 1 → "2"+"1" = "21"。看 "1":连续 1 个 1。按 RLE,个数 + 字符 → "1"+"1" = "11"。模拟遍历过程,拿例子 s="21"(n=3 的结果,用来生成 n=4):指针 i 从 0 开始,i=0,字符是 '2'。现在看字符串 "21":第一个字符是 2,后面紧跟着是 1,不相等。2、i 往后走一步,i=1,字符是 '1',不等于 cur。4、i 再往后走一步,i=2,超出字符串长度,循环结束。1、当前字符 cur='2',计数器 count=1。
2026-10-22 23:26:47
166
原创 【学习笔记】51单片机 点亮一个LED灯
若是让LED灯一个亮一个不亮这样接下去只用改变P2后的十六进制数为55(二进制为0101 0101)就可以达到这样的效果。接着去STC中查找文件,显然没有找到,这是因为没有勾选好keil中的Create 这个选项导致的。总结来说就是:CPU通过控制寄存器来控制硬件电路,而硬件电路来执行我们想完成的功能)这里下方提示出现错误,这是因为系统不认识头文件,所以给它加上认识的头文件。例如:473就是47000 3是倍数,也就是47*10^3。这就是完整的可以点亮LED的程序。单片机5V为高电平,0V为低电平。
2026-10-21 23:41:29
263
原创 【51单片机】开始软件安装和构成
但在性能上,与计算机相差甚远,但单片机成本低、体积小、结构简单,在生活和工业控制领域大有所用同时,学习使用单片机是了解计算机原理与结构的最佳选择。对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一。
2026-10-19 00:16:07
184
原创 【题目练习】删除排序链表中的重复元素Ⅱ
先把这个重复的值存下来 repeatVal = cur.next->val 写内层循环:只要 cur.next 不为空,并且 cur.next 的值等于 repeatVal,就执行 cur.next = cur.next->next。举例子:2→2→2→3,cur 在 dummy,删完所有 2 之后,cur 还是 dummy,cur.next 指向 3,继续循环判断。初始状态:dummy → 1 → 2 →3→3→4→4→5(cur = dummy)cur 站在 dummy 的位置。
2026-10-18 00:25:54
125
原创 [题目练习】三数之和
现在去重:left 现在是 2,nums [2]==nums [3],left 跳到 3;去重 i:如果当前nums[i]和前一个nums[i-1]相等,跳过,避免重复三元组。4、计算三数总和 sum = nums[i]+nums[left]+nums[right]2、三个数字相加等于 0:nums[i]+nums[j]+nums[k] = 0。sum = -1 + (-1)+2 = 0 √ 找到 [-1,-1,2]sum = -1 +0 +1 =0 √ 找到 [-1,0,1]
2026-10-15 23:32:45
162
原创 【题目练习】盛最多水的容器
面积(水量)= 宽度 × 水高度 = (j‑i) * min (height [i], height [j])area=8*1=8。5、示例 : 输入:height = [1,8,6,2,5,4,8,3,7],输出答案 49。最左边柱子 和 最右边柱子,此时宽度 = n‑1,宽度直接拉满。但这个是有问题的,如果n很大,比如n=1e5,双层循环要运行很多次,所以不适合。样例数组:[1,8,6,2,5,4,8,3,7],n=9。
2026-10-14 23:39:01
237
原创 【题目练习】字符串相乘
1、笔算的时候,都是拿最右边(个位)开始乘,所以循环必须倒着遍历字符串,i 从 n‑1 往 0 走,j 从 m‑1 往 0 走。res_arr[pos1] += sum / 10 → 进位加到 pos1(是 +=,不是 =,pos1 可能还有别的进位过来)num1 = "123",下标:0:'1' 1:'2' 2:'3',最右边个位下标是 2。num2 = "456",下标:0:'4' 1:'5' 2:'6',最右边个位下标是 2。比如 i=2(数字 3),j=2(数字 6),3*6=18。
2026-10-11 18:08:27
138
1
原创 【题目练习】算法 组合总和||
3、同层去重:如果 for 循环当前 i>start,并且candidates[i]==candidates[i‑1],直接 continue 跳过。组合 I 传 i,可以重复选取。因为元素只能选一次:递归下一层 start = i+1,而不是 i(组合 I 是 start=i,可以重复选自己)1、qsort排序:[10,1,2,7,6,1,5]排序后变成[1,1,2,5,6,7,10]。2、最终结果不能有重复组合,比如不能同时出现[1,7]和[7,1],也不能两个一模一样的[1,1,6]
2026-10-10 23:30:56
219
原创 【题目练习】算法 组合总和
题目:解法:思路:一、读题【2,3】3,2]】组合不看顺序 → 为了避免 【2,3】、【3,2】这种重复答案,我们强制。举例:选了下标 0 的 2,下一轮还可以选下标 0;但选到下标 1 的 3 之后,就不能回头再选下标 0 的 2。天然消除排列重复。二、回溯。三、startstartsumpathcandidatestargetreturnSizeres。
2026-10-10 00:03:19
187
原创 【题目练习】算法 最接近的三数之和
比如 sum=2,target=1 差值 1;2、固定第一个数nums[i],剩下两个数用左右双指针:左left = i+1,右right = n-1。3、计算三数和sum = nums[i]+nums[left]+nums[right]abs(-3-1)=4,abs(-4-1)=5 → 4 更小,best=-3。排序后数组变成:[-4, -1, 1, 2],numsSize=4。测试:nums = [-1,2,1,-4], target=1。初始化best = -4 + (-1)+1 = -4。
2026-10-08 22:46:10
200
原创 【C语言题目练习】算法 整数反转
如果 res == 214748364,并且取出的个位digit>7,res*10+digit>2147483647溢出。不断取出 x 最后一位digit = x%10,x=x/10砍掉最后一位,res = res*10 + digit。int 最小值 INT_MIN = -2147483648,INT_MIN /10 = -214748364。如果 res == -214748364,并且digit < -8,就溢出。如果 res < -214748364:res*10 直接爆下限,溢出。
2026-10-06 23:21:37
271
原创 【算法题目练习】找出字符串中第一个匹配项的下标
每一个 i,拿 j 从 0 开始,依次对比 haystack [i+j] 和 needle [j]如果 j 走完整个 needle(j==m),代表全部匹配,return i。对每一个起始位置i:从i开始,对比连续m个字符,看是否完全等于needle。1、拿到两个字符串的长度:n = haystack长度,m = needle长度。2、边界判断:m>n,直接 return -1;2、如果子串比主串还长,直接返回 -1,不可能匹配。不等,停止,换下一个 i。3、i 从 0 开始循环,i ≤ n-m。
2026-10-02 23:56:13
168
原创 【题目练习】括号生成
放右 right<left (2) → right=2 path="(())",left=2 right=2,再补一个左,再补右 → (()())继续放左 left<3 → left=3 path="(()(",之后只能补两个右 → (())()分支 A2:不放左,放右,right<left (2) → right=1 path="(()"分支 B:不放左,放右,right<left (1) → right=1 path="()"right 从 1→2 path="((()))"
2026-09-29 23:08:55
179
原创 【题目练习】最长公共前缀
如果 strs [j][i] == '\0' (当前字符串到末尾了)→直接截断返回前缀。5、外层循环正常走完,代表第一个字符串全部是公共前缀,返回 strs [0]4、特殊情况:数组只有 1 个字符串,那这个字符串本身就是公共前缀。如果候选前缀缩到空字符串,直接返回 "",不用继续看剩下字符串。三、1、如果 strsSize ==0,没有字符串,返回空串。["abc","xabc"] 公共前缀是空,不是 abc。2、公共前缀:所有字符串都必须拥有,并且是开头连续。5、如果第一个字符就不一样,直接返回空串。
2026-09-27 23:59:18
179
原创 【学习笔记】51单片机
1、单片机是一种将中央处理器(CPU),存储器,输入/输出接口集成在一个芯片上的微型计算机,它具有体积小,价格便宜,易于编程等特点,广泛应用于家用电器的智能控制模板。STC:生产厂商 89:单片机型号 c:工作电压 c:5.5v-3,3v LE:3.6-2.0v。关于EA(EA管脚内部上拉到Vcc)1、如外部不加上拉,或外部上拉到Vcc,上电复位后单片机从内部开始执行程序。时针引脚:XTAL1,XTAL2用于连接时钟源,为单片机提供时钟信号。电源引脚:Vcc,Gnd,用于为单片机供电。
2026-09-27 23:38:41
225
原创 【题目练习】删除有序数组中的重复项Ⅱ
如果 nums[fast] == nums[slow-2]合法数组里,倒数第二个就是这个数字,说明合法数组已经放了。fast=2,nums [fast]=1比较 nums [slow-2] = nums [0] = 1。slow 保持 2 不变。三、自己计算nums=[1,1,1,2,2,3]
2026-09-27 00:45:21
147
原创 【学习笔记】《C Primer Plus》
显然printf()是输出函数,scanf()是输入函数,但是它们的工作原理几乎相同。可以没有小数点(如,2E5)或指数部分(如,19.28)但是不能同时省略两者。打印long doub.,可用a和记数法的浮点数。·它们不仅是C语言中的1/0函数,而且是最有用的函数。·不要在浮点型常量中间加空格:默认情况下,编译器假定浮点型常量是double类型的精度。·最初,C把输入/输出的实现留给了编译器的作者,这样可以针对特殊的机器更好地匹配输入/输。数点),后面紧跟e或E,最后是一个有符号数表示10的指数。
2026-09-27 00:07:31
169
原创 【题目练习】最大子数和
举个例子,i=3,nums [i]=4:以 i-1(也就是 - 3)结尾的最大子数组和是 -2。[4,-1,2,1]可以;[4,2,1]跳过 - 1 不行。dp [2]=-2。对比 maxSum (-2),maxSum 更新成 1。1:把 nums [i] 接到【以 i-1 结尾的最大子数组】后面;数组:[-2, 1, -3, 4, -1, 2, 1, -5, 4]样例 dp 数组:[-2,1,-2,4,3,5,6,1,5]
2026-09-26 00:41:08
201
原创 【学习笔记】C Primer plus
hello world的程序中有一个名为main()的函数。6、代码中使用种新的变量表明。前面的例子中使用了整数类型的变量(int),但是本例使用浮点数类型(float)变量,以使处理更大范围的数据。%.2.f中的.2用于精确控制输出,指定输出的浮点数只显示小数点后面的两位。最后调用的printf()把num的值内嵌在用双引号亏起来的内容中一并打印。stdio.h是C编译器软件包的标准部分,它提供的键盘输入和屏幕输出的支持。printf()是标准的C库函数,在程序中使用函数叫做调用函数。
2026-09-26 00:00:10
262
原创 【题目练习】堆/优先队列+图论基础
解题思路:维护一个大小为 k 的小顶堆。堆里面保存目前最大的 k 个数,堆顶就是这 k 个里最小的,也就是全局第 k 大。堆满了,如果当前数字 > 堆顶,替换堆顶,下沉调整。如果左孩子存在,并且值更小,更新minIndex。如果右孩子存在,并且值更小,更新minIndex。shiftDown:小顶堆下沉函数。题目一、数组中的第K个最大元素。3、记录最小值节点,初始为自身。最小值不是自己,交换,继续下沉。i是当前要下沉的节点下标。堆还没满,直接插入,上浮。释放堆内存,防止内存泄漏。满足堆性质,停止下沉。
2026-09-20 22:47:39
225
原创 【学习笔记】数据结构 堆/优先队列+图论基础(堆的插入、弹出、topk问题、DFS、BFS遍历)
遍历数组,大于堆顶就入堆,最后堆里就是最大 K。如果数组下标从 1 开始:parent=i/2,left=2i,right=2i+1,写代码看习惯。DFS 深度优先搜索:一路往深处走,走不通再回溯,类似二叉树前序遍历,递归实现。TopK 问题最经典:在一堆数字中,找出前 K 大(或前 K 小)的数。BFS 广度优先搜索:一层一层遍历,借助队列,适合求最短路径(无权图)普通队列:先进先出;2、和父节点比较,如果不满足堆性质,交换。1、大顶堆:父节点 ≥ 左右孩子;2、小顶堆:父节点 ≤ 左右孩子;
2026-09-20 22:13:48
225
原创 【题目练习】动态规划+背包问题
3、到第 i 阶,最后一步要么走 1 阶(前面 i-1 阶),要么走 2 阶(前面 i-2 阶),方案相加。3、递推公式:dp[j] = max(dp[j], dp[j - nums[i]] + nums[i])选就是dp[j-nums[i]]+nums[i],取大。2、递推公式:dp[i] = dp[i-1] + dp[i-2]1、dp数组定义:dp[i]:爬到第 i 阶楼梯的方案数量。4、初始化:dp [1]=1,dp [2]=2。1、dp数组,dp[i]:爬到i阶台阶的方案数。
2026-09-20 17:34:50
104
原创 【学习笔记】动态规划+背包问题
选当前物品,容量减少 weight [i],价值加上 value [i],取两者最。比如 01 背包:dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);递推公式:dp[j] = max(dp[j], dp[j - w] + v)2、拿当前物品:背包腾出 w [i] 空间,加上当前物品价值 v [i]dp 一维数组定义:dp[j]:背包容量为 j 时,能装的最大价值。示例:一维 dp,dp[i] = 考虑前 i 个物品时能得到的最大价值。
2026-09-19 23:42:53
222
原创 【题目练习】贪心算法+回溯算法
当前区间的起点 > 上一箭位置 → 射不到,必须加一支新箭,新箭位置 = 当前区间右端点。递归下一层,传 i + 1(只能往后选,不能回头,避免 [1,2] 和 [2,1] 重复)。4、为什么对:每支箭都放在 "能射穿当前气球的最靠右位置",一箭覆盖尽可能多的后续气球,箭数最少。4、为什么对:每次选 "结束最早" 的区间,给后面留的空间最大,能保留的区间最多。arrowCnt++;========== 收集结果 ==================== 终止条件 ==========
2026-09-18 23:00:52
138
1
原创 【学习笔记】数据结构 贪心算法,回溯算法(局部最优推全局最优,区间问题,回溯算法自己,排列)
区间:一般用 [start, end] 表示一段范围,比如 [1,3],起点 1,终点 3。1、树层去重(最常用,子集 / 组合):同一层递归,不能选取相同数值元素,避免出现重复集。两个区间 [s1,e1]、[s2,e2],假设已经排序 e1 <= e2。每次选结束最早的区间,留给后面剩下的空间最大,局部最优,进而全局最优。需要先排序数组,判断 nums[i]==nums[i-1],跳过。从集合选出元素,不考虑顺序,[1,2]和[2,1]是同一个子集。排序写错(把左端点排序当成右端点排序,直接结果错误)
2026-09-18 13:50:48
187
原创 【题目】二分查找+搜索旋转排序数组
如果左半有序:判断 target 是否落在nums[left] ≤ target < nums[mid],在里面→right=mid-1。如果左半无序,右半一定有序:判断 target 是否落在nums[mid]<target <= nums[right],4、判断左半段[left,mid]是否有序:nums[left] <= nums[mid]2、右指针,数组最后一个下标,右边界可取,[left,right]闭区间。7、nums[mid]>target,目标在mid左边,mid排除。
2026-09-17 00:17:54
168
原创 【学习笔记】数据结构 二分查找(二分查找模板+边界处理+查找区间+旋转数组)
1、mid 计算:mid = left + (right-left)/2,不要写(left+right)/2,left+right过大时会整数溢出。2、如果左半有序:判断 target 是否在nums[left] ≤ target < nums[mid],是就去左边,否则去右边。3、如果右半有序:判断 target 是否在nums[mid] < target ≤ nums[right],是就去右边,否则去左。概念:原本升序数组,在某个点旋转,分成两段有序子数组,例如 [4,5,6,7,0,1,2]
2026-09-16 23:30:25
207
原创 【学习笔记】数据结构 二叉树(前中后序递归遍历+队列实现层次遍历+对称二叉树,最大深度+路径问题,反转二叉树)
1、 终止条件:root == NULL,直接 return(递归出口,防止无限递归)思路:1、递归终止:如果当前节点 root 为 NULL,直接返回 NULL,没有节点可翻转。3、节点值相等,并且:左节点左孩子 == 右节点右孩子;左节点右孩子 == 右节点左孩子。思路:交换当前节点的左、右子节点,然后递归反转左子树、递归反转右子树。递归思路:当前节点深度 = max (左子树深度,右子树深度)+1。重点:叶子节点:left==NULL && right==NULL。3、左孩子不为空,左孩子入队;
2026-09-15 23:02:50
222
原创 【学习笔记】数据结构(链表合并 双指针合并有序链表)
1、dummy虚拟节点:不存有效数据,作用统一 “链表为空” 边界,不用单独判断 list1、list2 是否 NULL。创建一个临时空节点,作为新链表起点,避免单独处理链表为空的边界情况,大幅简化代码。2、cur = dummy:cur 是建造新链表的 “尾指针”,永远指向新链表最后一个节点。两个升序单向链表,合并成一条升序单向链表,不额外开辟大量数组空间,优先使用双指针法。4、cur = cur->next:新链表尾部向后移动,保证下一次接在最后。4、不要随便修改原始链表以外节点,避免野指针。
2026-09-13 23:56:10
184
原创 【学习笔记】数据结构 链表(链表遍历+虚拟头节点+快慢指针找中点+判环)
1、使用fast->next->next前,必须先判断 fast!5、必须先保存地址,一旦执行cur->next = cur->next->next,结点地址丢失,无法释放内存。= NULL,如果 fast 是空,后面表达式不会执行,避免访问fast->next。= NULL,不要写成cur->next!3、如果cur->next->val == val,删除 cur->next = cur->next->next。3、fast 一次走两步 fast = fast->next->next。
2026-09-12 22:41:29
112
原创 【题目】删除字符串中的所有相邻重复项(消消乐模板)
的简写形式,字符写入栈,然后栈计数 top+1。stack[top-1] == s[i]:栈最上面的字符,等于现在读到的字符 ——>相邻重复,可以消除。top>0:栈里面有元素(如果栈是空,直接跳过判断,不能访问 stack [-1],会数组越界崩溃)例子:top=2,栈有 2 个元素,下标 0、1,栈顶就是 stack [1](栈顶出栈,一对字符消除)9、循环 i 从 0 到 len-1,逐个读取s[i],从头到尾遍历字符串。(申请栈内存,最多存len个字符,+1留给'\0')
2026-09-12 19:29:30
121
原创 【学习笔记】数据结构栈与队列(栈先进后出+队列先进先出+括号匹配+消消乐模型)
ch:栈顶保存的预期右括号 和 当前字符不一致,括号类型不匹配。取出栈顶,如果和当前右括号成对,栈顶出栈;top == 0:栈里面所有元素全部弹出,所有左括号都找到配对 ans=1;10、上面三个都不成立,说明当前字符是右括号 ) ] },进入匹配逻辑。top == 0:栈是空,没有左括号和当前右括号配对。栈里面还有剩余元素,代表左括号多了,没有右括号闭合 ans=0。stack[top] = ')',随后top++,栈标记往后移动。7、读到左括号(,不存左括号,存入它对应的右括号)。
2026-09-12 01:14:12
158
原创 【学习笔记】数据结构(哈希表基础+哈希集合+哈希映射+计数+查找)
只有当整个循环完整跑完,全程没有找到任何一对相等的相邻元素,才能确定数组中不存在重复数字,此时返回false。写在 containsDuplicate 里面属于嵌套函数,LeetC 编译器不支持),直接引发编译报错。C 语言实现方式:布尔数组 bool hash[ ],存在置 1,不存在置 0。只有第二轮完整遍历结束,全程没有找到次数等于 1 的字符,才执行这条语句。3、遍历数组,判断当前元素和下一个元素是否相等,相等返回 true。所有字符出现次数都>=2,不存在唯一字符,按题目要求返回 - 1。
2026-09-10 22:31:17
95
原创 【C语言】题目(替换空格)
1、遍历一遍原字符串,算出一共有多少个空格,计算出新字符串最终的长度。strlen(s):获取原字符串有效字符长度(不含\0结束符)。C 语言字符串必须以\0结尾,先把结束符放到新字符串尾部。请实现一个函数,把字符串s中的每个空格替换成“%20”。new--含义:赋值完成以后,new 指针往前移动一格。new:新字符串末尾结束符将要存放的下标位置。old:原字符串末尾结束符\0的下标位置。从后往前移动指针,字符只需要移动一次。循环扫一遍字符串,数一数空格有多少个。old:指向原字符串最后一个有效字符。
2026-08-31 00:09:48
235
原创 【学习笔记】字符串(遍历+反转+替换+子串匹配+KMP)+题目解析
常见实现方式:切片反转、双指针交换(左右指针相向移动,交换对应字符,时间复杂度最优)、遍历倒序拼接:从最后一个字符向前遍历,逐个拼接。暴力匹配原理:依次以主串每个字符为起点,与模式串逐字符比对,匹配失败则主串指针回溯、模式串指针重置,直到匹配成功或遍历完毕。,全称 Knuth-Morris-Pratt,专门解决暴力匹配的回溯冗余问题,是字符串匹配的核心进阶考点。核心技巧:写一个区间反转函数,给起始下标,结束下标,就可以反转一段字符。:定义左、右指针,从两端向中间遍历,常用于反转、回文判断、区间匹配。
2026-08-29 23:45:01
249
2
原创 【学习笔记】数据结构(数组滑动窗口+无重复字符的最长字串题目)
开启 while 循环,不断把窗口左边的字符移除,left 向右移动;一直缩窗口,直到窗口内没有重复字符为止;4、while 循环判断窗口是否不合法:如果不合法,移动左指针缩小窗口,更新状态,left++3、两个指针只会往前走,不会回退,时间复杂度:O(n),远优于暴力二重循环O(n的二次方)right就是敞口的右边界,循环每执行一次,右边界向右挪一格,扩大窗口。5、窗口变成合法(无重复)之后,计算当前窗口的长度,更新最长长度;2、left:当窗口不满足条件时,向右收缩窗口(去掉左边元素)
2026-08-27 22:28:05
233
原创 【学习笔记】数据结构(数组长度和关键特性+快慢指针+左右指针)
条件必须写<=,不能写< 当left和right指向同一个元素的时候,代表还剩最后一个数字,也要处理。给一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组要求也按照非递减顺序排序。放到自定义函数里面做不到。int* nums:传入数组,C语言数组传到函数实际是指针,拿不到数组长度。malloc开辟堆内存,用完必须释放,C语言重要考点,不写会内存泄漏。如果写left < right,中间剩下的那一个元素直接跳过,出错。fast遇到符合条件的元素,就赋值给slow位置,slow++。
2026-08-26 22:37:03
195
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅