- 博客(38)
- 问答 (1)
- 收藏
- 关注
原创 cpp刷题打卡记录33——回文链表 & 环形链表 & 环形链表II
先将一个指针置为NULL如节点p(作为一会链表的结尾),然后一个指针指向头节点slow,然后让slow的next指向p,然后同时slow指向下一个节点,p也指向下一个节点,重复slow->next = p。如图所示,如果有环的情况下,慢指针步数*2 = 快指针的步数:2*(x+y) = x+y+n*(y+z) ,化简可以得到x=(n-1)(y+z)+z,表明 头节点到环入口点的长度 = 相遇点到入口点的长度(x=z)。需要注意的是这里比的是链表节点的值val是否相等,而不是链表节点是否相等。
2026-04-23 13:24:30
384
原创 cpp刷题打卡记录32——完全平方数 & 零钱兑换 & 相交链表
(就相当于末尾对其)n=9:能用平方数1、4、9 dp[8]+1或dp[5]+1或dp[0]+1 dp[9]=1。n=10:能用平方数1、4、9 dp[9]+1或dp[6]+1或dp[1]+1 dp[10]=2。n=12:能用平方数1、4、9 dp[11]+1或dp[8]+1或dp[3]+1 dp[12]=3。
2026-04-22 14:00:13
357
原创 cpp刷题打卡记录31——爬楼梯 & 杨辉三角 & 打家劫舍
从大于三间房屋开始,每次当前房子能偷到的最大值就只能是 ppre+当前 和 pre 之间的最大值,然后更新定义的三个值。(我一开始的想法是先定义一个bool类型的数组,被偷过的元素的前一个和后一个就设置成false,其余都是true,然后只能在true里面选择再去偷。是一个动态规划的题目,给我感觉有点像递归。思路就是 到第 n 阶楼梯的方法数 = 第 n-1 阶的方法数 + n-2 阶的方法数,为什么呢,就是。然后每行的第一个数和最后一个数都是1,中间的每个数就是与之相邻的上一行的两个数的和。
2026-04-22 10:45:46
208
原创 cpp刷题打卡记录30——轮转数组 & 螺旋矩阵 & 搜索二维矩阵II
思路是一圈一圈的输出,最后最中间那块再单独处理输出一下。需要注意的是一圈一圈的输出是要按照相同的规律去输出的,如上代码就是左闭右开去输出的,然后每次都从(0, 0),(1, 1)这样的位置开始进行输出。那么先翻转整个数组[7,6,5,4,3,2,1],再翻转前k个[5,6,7,4,3,2,1],再翻转后面的[5,6,7,1,2,3,4],得到最终结果。,k如果等于数组的大小,那就最终会刚好翻转一遍和原数组相同,所以当k大于数组大小,就没有必要翻转那么多次,所以有k = k%n的步骤。
2026-04-20 15:18:59
286
原创 cpp刷题打卡记录29——矩阵置零 & 旋转图像 & 除了自身以外数组的乘积
这个思路是定义了一个左数组和一个右数组,然后对应的除了自身以外数组的乘积就是该位置的左边和右边乘积。这个左数组和右数组的赋值有点像前缀和的感觉。left[0]和right[n-1]设置为1是因为left[0]没有左边的数,right[n-1]也没有右边的数。很巧妙的思路,是通过翻转来做到顺时针旋转90°的。(如果是逆时针旋转90°,就先水平翻转再副对角线进行翻转)。我还是创建了额外的vector来进行存旋转后的矩阵,所以思路想法比较简单。属于暴力解法,时间复杂度为O(mn),空间复杂度为O(m + n)。
2026-04-17 21:10:36
93
原创 cpp刷题打卡记录28——合并区间
原因是可能会出现多个连续的数组,不止两个数组可以合并,如[[1,3], [2,4], [4,6], [8,10]],前三个区间都有重叠部分,可以合并,要确保合并完了再进行插入。首先要排序,为什么要排序就是我前面讲的出现的示例3的情况,排序完之后可以重叠的区间就一定可以连续出现,这样就比较好处理了,就可以直接用(前一个区间的end大于等于后一个区间的start,那么这两个区间就可以合并)方法了。刚开始没有思路,只知道如果前一个区间的end大于等于后一个区间的start,那么这两个区间就可以合并。
2026-04-12 12:54:25
37
原创 cpp刷题打卡记录27——无重复字符的最长子串 & 找到字符串中所有字母的异位词
思路是:for循环计算每个元素所对应前缀和,然后找是否有两前缀和相减为k(也就是某一段数组的和为k),若有则算是找到了符合要求的子数组,加对应的次数。我刚开始的错误思路:也是利用前缀和,但我是找了最大的前缀和和最小的前缀和,然后它俩相减就是最大和的连续子数组,只能通过部分测试用例。这个时间复杂度为O(n),双指针的方法用在这里很正常,比较新奇的一点是这个解法先定义了两个vector,然后利用字母出现的频次来判断是否异位,很巧妙。自己写的全只能通过部分用例,哈哈,还是考虑的不够全面,哈哈。
2026-04-11 21:55:48
192
原创 cpp刷题打卡记录26——字母异位词分组 & 最长连续序列 & 盛水最多的容器 & 三数之和
首先要找出连续序列的第一个元素,是通过判断set里面是否有遍历到的当前元素的值-1的元素,若没有则可以当做连续序列的第一个元素,然后用while来进行寻找后续的连续序列(也是判断当前元素值+1是否在set里面),记录其序列的长度。首先在写的isYiwei函数中逻辑并不完整(我为什么会这样写,感觉只考虑到的题目所给的情况,没有想到全部),比如若str1是aab,str2是abb,这个函数一样会判断为true,这是不对的。题目并不难,就是在算长方形的面积,长方形的两条边选择较短的那条。暴力解法:超出时间限制。
2026-04-11 17:07:46
390
原创 cpp刷题打卡记录25——从中序和后序遍历序列构造二叉树 & 从前序和中序遍历序列构造二叉树
通过后序数组的最后一个元素把中序数组切成中序左数组和中序右数组,中序左数组右多少个元素,后续左数组就有多少个元素。但是要注意的是这里舍弃前序数组的第一个元素时采用的是erase,resize只能默认从数组后面截取去掉。也就是中序数组和后序数组大小都是一样的,各自切成左右区间后,里面元素的个数也是相同的。,根据中序数组,反过来再切后序数组,然后一层一层切下去,每次后序数组的最后一个元素就是节点元素。3、切割中序数组,切成中序左数组和中序右数组;4、切割后续数组,切成中序左数组和中序右数组;
2026-04-06 21:59:23
220
原创 cpp刷题打卡记录24——路径总和 & 路径总和II
思路是:整体采用前序遍历,因为既要遍历树的节点又需要记录从头节点到当前节点的路径的值,所以用pair结构 pair<TreeNode*, int> pair<节点指针, 路径数值> 来存放在这个栈里的元素。还需注意的是路径是根节点到叶子节点的,叶子节点是没有左孩子节点和右孩子节点的。,这个return只是返回了当前的递归,没有结束整个递归。也就是说在找到一条路径后,只结束当前节点的递归,返回到父节点,然后继续探索该父节点的其他子节点。与上一题不同的是,这道题目需要遍历整个树。讨厌递归,老是想不到。
2026-03-30 21:59:32
42
原创 cpp刷题打卡记录23——平衡二叉树 & 二叉树的所有路径 & 左叶子之和 & 找树左下角的值
这道题的思路是定义了两个stack和一个vector,一个栈用来保存树的遍历节点treeSt,一个栈用来保存遍历路径的节点pathSt,一个vector来保存最终的路径的集合result。要注意这个题目对于左叶子的定义:本身是左孩子并且还没有左右孩子。要通过其父节点来判断,所以也就是A节点的左孩子不为空,且A节点左孩子的左右孩子都是空,那么A节点的左孩子是左叶子节点。思路就是利用层序遍历的方法,求每一个节点的高度(注意高度和深度并不一样),然后再遍历每一个节点去判断左右孩子的高度是否符合。
2026-03-23 17:11:42
163
原创 cpp刷题打卡记录22——翻转二叉树 & 对称二叉树 & 相同的树 & 另一棵树的子树
一定要注意并不能访问NULL->left 或 NULL->right。且注意这不是判断左右是否相等,是轴对称。思路是利用层序算法,一层一层判断,并且当节点为空时也要放在队列和最终比较的数组中。这两个树是不相同的,但使用层序遍历时,不输出空节点的话,就会导致输出结果是一样的误判断为相同,将空节点输出为null就可以避免这种情况。若两个数按照同样的遍方法遍历一遍,得到的结果一样,那么树就是相同的,但一定要注意空节点也得算上。
2026-03-19 16:07:23
53
原创 cpp刷题打卡记录21——二叉树的层序遍历连招(102、107、199、637、429、515、116、117、104、111)
内层的for循环是遍历每一层的节点。需要注意的是for循环的次数,也就是size的大小,每次的while存换size都会改变。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。本篇是二叉树层序遍历的一套题,都是以二叉树的层序遍历为基础的,所以首先先来介绍二叉树的层序遍历。二叉树的层序遍历很重要,是很多题目的基础,并且初次自己写层序遍历并不容易完全写对,要记住层序遍历的实现。就是在二叉树的层序遍历中,将每一层最右边(也就是每一层的最后面的)的节点的值记录下来。在层序遍历的过程中,将每一层的最大值记录。
2026-03-18 18:25:17
198
原创 cpp刷题打卡记录20——前k个高频元素
统计频次的话首先就想到用map键值对的形式操作,key值为元素,value为其出现的频次(要用unordered_map,虽然map的排序是按照key值排的,我们需要按照value排)。接下来是从大到小排序,想到sort,默认sort是升序的,然后就用class Mycompare改变一下其排序顺序。这是因为我们想要只统计最大的前k个元素,不想要全部都排序,所以只有小顶堆能满足我们的要求,当队列个数大于k个时我们就可以直接用pop弹出,也就是每次将最小的元素弹出了,最后留在小顶堆里的就是前k个最大元素。
2026-03-16 23:12:27
179
原创 cpp刷题打卡记录19——滑动窗口最大值
该队列是单调队列,是从大到小排序的。在push元素的时候会进行比较,要保持队列从大到小的顺序,所以当队列的最后一个元素比要进队的元素大时就pop_back掉,只有当要进队的元素比队列最后一个元素小的时候才可以进队。到此时,我觉得此代码不需要pop函数,只用push就可以,但是当比如是5 3 1 -1 -3这个样子的时候就出现了错误,因为我们要找的是滑动窗口内最大的,所以在窗口滑动时出去的那个元素如果与队列里面最大值(也就是队列里面第一个值)相同的话,就得弹出。的滑动窗口从数组的最左侧移动到数组的最右侧。
2026-03-12 18:53:48
185
原创 cpp刷题打卡记录18——右旋字符串 & 实现strStr() & 重复的子字符串(未懂KMP算法版)
外层for循环 i 是子字符串的尾巴,n是子字符串的长度,内层for循环是n长度字符串、n长度字符串与pattern进行比较,一旦不一样,就表明n长度字符串不能重复构成整个字符串,然后就跳出内层的for循环。如果一个字符串是由某个子串重复多次组成的,那么把它和自己拼接一次得到s+s后,去掉第一个字符和最后一个字符(为了防止找到我们拼接起来的前一个s和后一个s)后,中间部分一定还能找到一个完整的原字符串s。但是如果字符串s本身没有重复的结构,那么在去掉首尾后就肯定不可能再出现字符串s。带我之后研究了来补充。
2026-03-12 15:35:57
347
原创 cpp刷题打卡记录17——用栈实现队列 & 用队列实现栈 & 有效的括号 & 删除字符串中所有的相邻重复项 & 逆波兰表达式求值
因为栈是先进后出,而队列是先进先出,所以用栈来模拟队列就会涉及到:队列弹出的元素是在栈的最底部,,我们把模拟进队的栈叫做输入栈,这样我们就还需要一个栈(输出栈)来重新把输入栈中的元素倒一下,把底部的元素放输出栈的顶部,就可以顺利弹出。该题目也是栈的思想,依次遍历tokens中的每个元素,如果是数字就放入栈中,如果是运算符,那么就从栈顶(也就是在tokens中运算符的前两个字符)取出两个元素,进行对应的运算,然后把结果再压入栈。要注意的是top函数是返回栈顶的值,而pop是要把栈顶的元素拿出栈。
2026-03-11 17:00:06
389
原创 cpp刷题打卡记录16——替换数字&反转字符串中的单词
需注意的是:在这个该函数中的for循环来说,是因为每次erase进行删除的时候字符串s的大小都改变了,导致索引也在变,所以有 i=i-1,是为了防止当有多个空格出现的时候出现漏删的情况。想法容易想到,但也有细节不太好写,该方法是相当于定义两个指针,从后往前让i去找到以空格分开的单词的首,j是该单词的尾,然后依次进行输出i和j之间的字符,对于多余空格的处理,也随着两个指针的遍历进行了处理。先扩大字符串的容量,再从后往前进行插入,避免了从前往后时挪动一个字符后面所有的字符就都要移动的情况。
2026-03-10 12:23:48
376
原创 cpp刷题打卡记录15——三数之和&四数之和
其判断条件是i>0 && nums[i] == nums[i-1],而不是nums[i] == nums[i+1],是因为存在{-1, -1, 2}的情况。代码的具体逻辑是:首先先固定一个数字,然后找第二和第三个数使其三个相加起来为0,当已经找到一组结果时,进行去重的操作以便找到下一组不重复的三元组。b和c的去重放在了满足三个数相加为0的情况下进行,因为只有找到了一组解,然后寻找下一组的时候才要和已找到的保持不重复。和“三数之和”逻辑是一样的,采用的是双指针法。,不容易想到,且写代码的时候也有很多细节。
2026-03-08 14:24:08
222
原创 cpp刷题打卡记录14——四数相加II & 赎金信
注意map[a+b]++的往map容器里插入的方式,[ ]里面是key值,map[a+b]++就是在a+b的key值对应的value值进行++操作。ps.因map[a+b]默认其value值是0,会引起问题:当容器中并没有以a+b为key值的元素,如果用map[a+b]想得到其对应的value值时,得出来会是0。又是一个哈希表的应用,要注意本题目中map的key值和value值分别代表什么,key值是两数之和的值,value是两数之和出现的次数。在哈希表的应用中要清楚key和value分别是什么。
2026-03-07 18:50:40
196
原创 cpp刷题打卡记录13——有效的字母异位词&两个数组的交集&快乐数&两数之和
用unordered_set会比较简洁,首先这个容器的特点是不允许有重复的元素,并且可以使用find很好查询其中所存的元素,所以步骤可以是:1、先把一个数组存入unordered_set中以去掉重复的元素;2、然后依次遍历第二个数组,找第二个数组中的各个元素是否在新的se中(找重复的元素);s[i] 这种在C++中也是可以的,像访问数组一样访问字符串中的每个字符。”读作是“属于”,“:”后面是要遍历的容器,整个就是对于nums2中的每一个元素都赋值给num,然后执行循环体。,是一种更简洁的遍历容器的方式。
2026-03-06 00:16:29
330
原创 cpp刷题打卡记录12——链表相交&环形链表II
在相遇时slow指针走过的节点数为x+y,fast走过的节点数为x+y+n(y+z),n(y+z)是fast指针在环形里面走才遇见slow指针。又fast指针每次移动两个节点,slow指针每次移动一个节点,所以fast指针走过的节点数=slow指针走过的节点数*2:(x+y)*2 = x+y+n(y+z) 化简成。:定义两个指针fast和slow,让两个指针先都指向head,然后让fast每次移动两个节点,slow每次移动一个节点,如果有环存在,那么两个指针就一定会在环里的某个节点相遇。
2026-03-06 00:00:50
335
原创 cpp刷题打卡记录11——删除链表的倒数第N个节点
之前从来没有注意return的值,这道题目才发现,return dummyHead->next和return head的区别,只有return dummyHead->next才是正确的,因为dummyHead->next已经更新了成为了新的头节点,而head还没有更新还依然是原来地址,所以是错误的。扫描了两趟列表,首先先扫描一遍得到链表的大小,由需要删除的倒数第几个和链表的大小计算得到其正着数是第几个,然后就是得到删除下标为几的元素,执行删除的操作。时间复杂度是O(2n)=O(n),空间复杂度是O(1)。
2026-02-12 01:51:03
345
原创 cpp刷题打卡记录10——两两交换链表中的节点
错误,会陷入死循环,因为当执行完第一行时,current->next->next还是原本的链表指向,没有改变,就导致第二行没有到达期待的目的,链表的tmp2元素的next指向自己了,失去链表的顺序,链表的下一个都不知道该怎么指向了。所以修改指针指向的顺序十分的重要。在数组中交换数组中某两个值只需要找一个tmp用来存放一下原本的值就可以交换,但在链表中交换链表中的某两个节点时不仅需要tmp先来存放一下要交换的值,还一定要注意操作的。,就是要让链表中的节点依次找下一个要指向的节点,一定要注意是。
2026-02-11 01:49:43
177
原创 cpp刷题打卡记录9——设计链表&反转链表
感觉链表还挺麻烦的,没有办法像数组一个直接用过下标索引来访问值,但是链表删除和新增比数组方便,直接改变该新增或删除的那个元素的位置的前后两个的指向就可以。该方法是采用了两个指针,先让n2指向头节点,然后n1指向NULL,让原本NULL——>head进行反转变成head——>NULL,这就完成了第一次的反转,然后再依次挪动两个节点,循环这个逻辑,就能够成功解决该题目。原本还想的是用一个新链表来存储,但这显然会有没必要的内存空间的浪费,通过两个指针来循环一次改变指向就可以完成反转,还挺巧妙的嘞。
2026-02-09 16:24:14
437
原创 cpp刷题打卡记录8——移除链表元素
这句代码的意思已经是把需要删除的元素,从列表中移除了,但是其被删除的那个元素还在内存空间里,所以需要用tmp这个临时节点来记录被删除的元素(因为后面current->next要重新赋值,所以需要tmp来记录它原来的值),方便对其进行内存释放。对于内存管理丝毫没有概念,根本没有注意内存泄露的问题,对于new出来的新节点要delete,在代码过程中也要时刻注意内存泄露的问题。ps.何为内存泄漏?虚拟头节点的设置是为了后续能够一起处理链表的元素,不用对头节点有单独的操作。的节点,并返回新的头节点。
2026-02-09 00:52:16
375
原创 代码随想录——数组部分刷题总结篇
同样需要注意的是窗口两端的指针分别指向的是什么,除此之外还需注意窗口如何变动的条件的设置,窗口内也就是两个指针所夹住的区间代表的是什么。接着for循环为每一行分配内存,arr2[i]访问第i个指针,第i个指针指向在堆区又分配的包含m个int类型的一个数组,也就是每个arr2[i]都指向一个包含有m个整数类型的数组。数组的下标是从0开始的。的,该行的首元素和前一行的末元素的内存地址也是挨着存储的。的,可以看到该行的首元素与上一行的末元素并不是连存放在一起的,而每一行的元素的内存地址是连续的。
2026-02-07 17:36:06
1309
原创 cpp刷题打卡记录7——区间和
3和4改进了方法,用了前缀和思想,新增了一个容器用来专门储存前n项和,然后在往vector容器中加入数据时就直接计算和并放到sum容器中,即 sum[i] 表示 下标 0 到 i 的 v[i] 累加之和。1和2用的一样的方法,最简单直观的,先用for循环进行输入,然后直接利用下标在用一个for循环进行累加然后输出,可以看出这种方法耗费的时间比较长,当把我cin/cout换成scanf/printf时间缩短了一些,但还是没有通过。题目很简单,没有什么思想上的难度,但是通过要求设置的比较严苛。
2026-02-05 14:50:36
355
原创 cpp刷题打卡记录6——螺旋矩阵II
就可以,因为每一次赋值的数组时是统一一致的,左闭右开,就可以统一规律进行遍历。还有就是当n为奇数时,最中间的位置没有被赋值,需要单独拎出来进行操作。一定要细心,写代码的时候有很多小细节。其实有一点点像二分查找的区间的确定,一定要主要区间的使用,要统一起来。这样就不行,第一次循环是左闭右闭,但是下一个循环就不是左闭右闭了。所有元素,且元素按顺时针顺序螺旋排列的n*n正方形矩阵matrix。就有这两种情况,所以要分开再处理一下中间赋值的情况。给你一个正整数n,生成一个包含1到。思想一样,就是多了是。
2026-02-04 16:37:01
156
原创 cpp刷题打卡记录5——水果成篮
该方法主要是利用了map的特性,map里面存的数据都是成对出现的(如{1,2}),对应到题目中就是让key作为水果的种类,value作为对应某一类水果的数量。map中插入方法(如basket[4]=40)的特性是,插入{4,40},但这种方法有一特殊之处就是当如果写一个key不存在的数,这种方法会自动给该key值对应的value赋成0。,开始向前移动slow并且往外面拿水果(因为只有一个篮子空了才能去装别的类型的水果),直到把某个篮子拿空,再重新装入新的类型的水果。,返回你可以收集的水果的。
2026-02-03 18:18:34
1319
原创 cpp刷题打卡记录4——长度最小的子数组
这个方法也就是所谓的滑动窗口法,达到了O(n)的时间复杂度。虽然整个代码看起来是for循环里面又嵌套了while循环,但是实际上每个元素只会在出窗口和进窗口进行加或减的操作,所以其时间复杂度是O(2n)也就是O(n)。这是我初识滑动窗口法的题目,该方法其实也是双指针法的一种,灵活应用两个指针的指向来大大减少时间复杂度。时间复杂度要看实际上元素到底是怎么被操作的,超出时间的代码不是好代码。对比之前的快指针的慢指针要注意两个指针分别指向什么的含义,滑动窗口法也需要注意:窗口内是什么;记录了代码改进的整个过程。
2026-02-01 16:30:26
272
原创 cpp刷题打卡记录3——比较含退格的字符串
要注意链两个指针的使用,还是紧扣快指针和慢指针分别的指向的是什么就不要容易糊。还是很容易迷糊的这个题目,可以多多复习一下。4、当求字符串长度时,str.length()和str.size()都可以,用于返回字符串中字符的数量并且不包含结尾的'\0',返回类型是size_t,即无符号整数类型。还是采用双指针的方法,让快指针去找新元素,慢指针指向更新的新数组的元素的位置。3、如果用str.erase()的迭代器,由于要指定删除元素的下标,所以对于连续的退格也不好使用;
2026-02-01 00:57:36
251
原创 cpp刷题打卡记录2——移除元素
一定要抓住快指针式去寻找新数组的元素,慢指针是指向新数组元素的下标。示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。对于原地修改数组,即空间复杂度为O(1),且对时间复杂度有要求的题目,可以考虑。
2026-01-31 00:57:19
289
原创 cpp刷题打卡记录1——在排序数组中查找元素的第一个和最后一个位置
以右边界为例,不像普通的二分查找找到目标值就return,这个二分查找要让其找到对应值,不返回,继续往右走。2、nums=[1 3 4 6 8 9],target=5,也就是数组里面没有目标值,且目标值在数组的区间范围内,那么也会返回rightRange且不是-2。3、nums=[1 2 3], target=4,属于数组里面没有目标值,且目标值大于数组的最大值或小于数组的最小值,这样会返回-2。写的有点迷迷糊糊,自己写的if判断条件不能包括全部情况,借助了ai。考虑极值:空数组、单元素数组。
2026-01-27 16:26:03
57
原创 C语言学习——int* arr和int arr[]傻傻分不清楚
差了40(一个int元素长度为4,十个就是40了),加1也就是加了一个与指针所指的类型的长度(一整个数组),因为&arr指的是一整个数组,所以其+1就直接跳过了整个数组。arr是数组名,代表的是首元素的地址,arr[0]是数组的首元素,那么都是打印首元素的地址,确实应该是一样的,也就是验证了数组名就是表示首元素的地址。这里就很好的可以看作一维数组的数组,可以把arr[0](黄色部分)当做一维数组的数组名,也就是第一行数组的数组名,那么arr[0]+1就指向第一行的第二个。+1的理解与一维数组方式一致。
2025-12-17 01:53:14
717
原创 C语言学习——二分查找
是因为我在写完了while循环后以为结束了,但是发现我的函数无法找第一个数和最后一个数,哈哈,我又笨拙的加了单独这两个数的判断,哈哈。传参到底是个啥啊,怎么主函数传的是arr(是个地址),接收的又用arr[]。代码还是要写好看一点,尽量不要打补丁,试着试着去写(这样写好了,也改进美观一下)。left=mid-->left=mid+1和right=mid-->right=mid-1。),这样的话如果要查找两头的值left和right最后指向同一个位置,mid也就能找到了。
2025-12-16 20:04:36
146
原创 C语言学习——函数调用部分
最内部的printf("%d",43)会打印43,返回值为2,即变成printf("%d", printf("%d", 2)),2由中间的printf()函数打印,然后其返回值是1,即变成printf("%d", 1),1由最外面的printf()函数打印,结束。形参的值在定义的函数结束时就已经没了,除了可以用return,它是无法和主函数建立联系的,所以即使在swap函数中已经完成交换值,也并不容易把多个值return给主函数。形参:在函数定义时声明的参数,也就是在函数头部的括号内。
2025-12-15 15:59:18
416
空空如也
用LM358对于一个20kHz,100mV的方波进行有源滤波,得到的正弦波幅值超过2V
2022-04-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅