| 题号 | 题型 | 答案 | 考点 | 解题思路 |
|---|---|---|---|---|
| 第 1 题 | 选择题 | A | 链表、时间复杂度分析 | 看到"尾插"和"已知 tail",立刻想到不需要遍历链表。关键观察是 tail 直接指向最后一个节点。插入新节点只需:分配内存、设置 next 为 nullptr、修改 tail … |
| 第 2 题 | 选择题 | C | 链表 | 删除中间结点核心是"先改邻居,再删自己"。看到题先定位 p 的左右邻居 p prev 和 p next,然后让左邻居的 next 跳过 p 指向右邻居,右邻居的 prev 跳过 p… |
| 第 3 题 | 选择题 | B | 链表 | 快指针每次走两步,慢指针每次走一步,当快指针到达末尾时,慢指针恰好在中间。这是链表找中点的经典技巧,时间复杂度O(n),空间复杂度O(1)。看到题先想"快慢指针",然后检查循环条件… |
| 第 4 题 | 选择题 | C | — | 看到递归函数直接联想到辗转相除法的标准实现。核心观察是每次递归把较大数替换为余数,直到余数为0。105%45=15,45%15=0,递归终止时返回15。这类题本质是考察对递归调用栈… |
| 第 5 题 | 选择题 | D | 循环控制 | 看到质数判断,第一反应是只需遍历到√n。因为若n有因子,必有一个≤√n。但i i在int范围会溢出,必须用long long保证安全。 |
| 第 6 题 | 选择题 | B | 复杂度分析 | 线性筛的核心是保证每个合数只被其最小质因子筛去一次。外层循环 i 是待筛数,内层 p 遍历已存质数。当 i % p == 0 时,p 已是 i 的最小质因子,i p 的最小质因子仍… |
| 第 7 题 | 选择题 | A | 唯一分解定理 | 看到质因数分解题,先想唯一分解定理——每个大于1的整数都能写成质数幂的乘积,且表示唯一。解题通法是从小到大试除质数:先除2看能除几次,再除3,再除5、7……直到商为1。本题数字75… |
| 第 8 题 | 选择题 | D | 函数与递归 | 递归题先找终止条件,再想每层返回什么。这题 n=1 时直接返回 1,其他情况返回 n+f(n 1),本质是把 1~n 累加。看到 f(4) 就按展开顺序一层层算:f(1)=1,f(… |
| 第 9 题 | 选择题 | C | 二分查找 | 二分查找框架,维护区间 [l,r) 表示答案一定在此范围内。每次取中点 mid,根据 a[mid] 与 x 的关系决定答案在左半还是右半:若 a[mid] 满足"太小"条件,则 l… |
| 第 10 题 | 选择题 | B | 二分查找 | 看到 check(mid) 判断,立刻想到二分答案。l 是下界,r 是上界,mid 是中间值。check(mid) 为真说明 mid 可行,但可能还有更小的可行值,要把上界缩到 m… |
| 第 11 题 | 选择题 | D | 归并排序 | 归并排序合并阶段需同时维护有序性和稳定性。稳定性要求相等元素保持原序,而合并时左区间元素天然先出现,因此当 a[i] == a[j] 时必须优先取 a[i]。这意味着条件需满足:a… |
| 第 12 题 | 选择题 | A | 快速排序、算法 | 快速排序的核心是划分操作:选定枢轴后,把不大于它的元素移到左侧,大于它的移到右侧。本题代码已经实现了两指针交换框架,横线处只需填判断条件。看到题先想:枢轴是 a[right],循环… |
| 第 13 题 | 选择题 | D | 贪心算法 | 区间调度最大化活动数量,贪心核心是"尽早腾出空间"。看到题先想:要选尽可能多,就得让每次选择后剩余可用时间最多。关键观察:结束越早,留给后面的时间越充裕。因此必须按结束时间升序排序… |
| 第 14 题 | 选择题 | C | 动态规划、算法 | 最大子段和是经典DP模型。看到题先识别出这是Kadane算法的模板实现——用两个变量维护「以当前位置结尾的最大和」与「全局最大和」。核心观察是递推式current = max(a[… |
| 第 15 题 | 选择题 | C | 循环控制 | 高精度加法核心在于逐位相加并处理进位。本题代码已正确计算当前位数字(sum % 10)存入 c,横线处必须更新进位变量。由于 sum 是当前位累加总值(含上一位进位),进位应取 s… |
| 第 16 题 | 判断题 | A | 链表、时间复杂度分析 | 这题考的是链表插入的基本操作。看到题先想指针重连的顺序:插入后 s 要指向原来 p 的下一个,p 要指向 s。关键观察是两条语句必须按特定顺序执行,否则会造成死循环或丢失链表。先 … |
| 第 17 题 | 判断题 | B | 指针与内存、链表 | 看到题先想三件事:1)delete 后 p 是否还能用?2)head 更新时机是否安全?3)是否遗漏了临时指针保存后继?关键观察是代码顺序:p = head; delete p; … |
| 第 18 题 | 判断题 | A | 算法 | 看到这类题先想算法不变量:gcd(a,b) = gcd(b, a%b)。迭代版每轮把(a,b)换成(b,a%b),顺序天然翻转,所以 a<b 时第一轮就把大数放 a 里了。再想边界… |
| 第 19 题 | 判断题 | A | 算法 | 看到筛法先想:质数倍数标记范围。核心观察是"小于 i² 的 i 倍数必有更小的质因子",因此从 i² 开始能避免重复标记。这类题通法:先定位算法框架,再分析优化条件,最后用反例验证… |
| 第 20 题 | 判断题 | B | — | 看到这题先想循环变量 i 每次乘 2,属于指数增长,循环次数是 log₂n。代入 n=1024 验算:i 依次为 1,2,4,8,16,32,64,128,256,512,1024… |
| 第 21 题 | 判断题 | A | 二分查找 | 看到题先想二分查找,因为数组已排序。关键观察是当 a[mid] <= x 时,记录 ans 并继续向右,否则向左。每一步推理的依据是二分查找的不变量:答案在 [l, r] 范围内,… |
| 第 22 题 | 判断题 | B | 快速排序 | 看到题先想什么?看到"快速排序"、"枢轴是第一个元素"、"已升序排列",立刻想到:每次分区都会把枢轴放到最右边,导致递归深度为 n,每层 O(n) 操作,总复杂度 O(n²)。 |
| 第 23 题 | 判断题 | A | 递推、分治算法、时间复杂度分析 | 看到递推式先想分治法的递归结构:T(n)=2T(n/2)+O(n) 是归并排序的标准递推,合并两个有序子数组需要线性时间。展开递推:T(n)=2[2T(n/4)+n/2]+n=4T… |
| 第 24 题 | 判断题 | B | 贪心算法 | 这题一眼看出是贪心策略,但贪心不是万能钥匙。看到"任意硬币面值集合"这个表述,立刻警觉——命题人就是要考你贪心算法的适用边界。硬币找零问题有经典反例,比如面值{1,3,4}凑6元时… |
| 第 25 题 | 判断题 | B | — | 看到减法循环先想"借位传播是否正确"。本题陷阱在于代码假设 a 和 b 长度相同,却未处理 a 比 b 短的情况。当 a 位数不足时,高位 b[i] 会直接参与减法,导致结果错误。… |
建议按「限时做 → 对答案 → 读常见错误」三步走。先按考试的真实节奏做完,再回来看每一题的解析;尤其是"常见错误"那一段——它对应的是命题人反复设置的陷阱,读完能直接迁移到同类题上。
想做限时模考,可在 OI伴学 平台切换考试模式;错题会自动归集,并按考点推荐同类练习。