

🌟 第 9 题:唯一分解定理------数字的"身份证"
(1)🧸 小故事
每个小朋友都有 唯一的身份证号 🪪
👉 不管你怎么写、怎么拆
👉 这个身份证只属于你一个人
整数也一样,每个整数都有一份 唯一的"素数身份证"
(2)📘 题目
唯一分解定理描述的是( )
A. 每个整数都能表示为任意素数的乘积
B. 每个大于 1 的整数能唯一分解为素数幂乘积(忽略顺序)
C. 合数不能分解为素数乘积
D. 素数只有两个因子:1 和自身
(3)🧠 核心理解
以 60 为例:
cpp
60 = 2 × 2 × 3 × 5
= 2² × 3 × 5
👉 顺序可以乱
👉 但 用哪些素数、各自用几次,是唯一的
(4)✅ 正确答案:B
⚠️ 易错点:
-
D 是"素数定义",不是唯一分解定理
-
A 的"任意"是错的!


🌟 第 10 题:在有序矩阵里找第 k 小的数 🔍
(1)🧸 小故事
小明有一张 魔法棋盘 ♟️
-
每一行从左到右越来越大
-
每一列从上到下越来越大
老师问:
👉 第 k 小的数字是谁?
(2)📘 解题思路(不用一个个数)
👉 用 二分答案 + 统计 ≤ x 的个数
核心循环:
cpp
while (lo < hi) {
int mid = (lo + hi) / 2;
if (countLE(matrix, mid) >= k)
hi = mid;
else
lo = mid + 1;
}
(3)🧠 为什么这样写?
-
countLE(mid):看看 ≤ mid 的数够不够 k 个 -
够了 → 答案可能更小
-
不够 → 答案要更大
(4)✅ 正确答案:C
⚠️ 易错点:
-
这里是 找"最小满足条件的值"
-
所以是
hi = mid,不是mid - 1

🌟 第 11 题:快速排序的"坏脾气"
(1)🧸 小故事
快速排序像一个爱分组的老师 👩🏫
-
每次选一个"基准"
-
把小的放左边,大的放右边
但如果老师 每次都选最倒霉的那个 😅......
(2)📘 题目问
下列关于快速排序的说法,哪一个是错误的?
(3)🧠 关键点
-
快排 平均 很快(O(n log n))
-
最坏情况 会退化成 O(n²)
-
partition 中左右扫描顺序 不能随便换
(4)❌ 错误说法
👉 D :扫描顺序可以交换 ❌
(交换会破坏算法逻辑)
✅ 正确答案:D


🌟 第 12 题:归并排序------合并阶段的小细节 🧩
(1)🧸 小故事
两队已经排好序的小朋友 👧👦
老师要把他们 合成一支更大的有序队伍
(2)📘 关键代码
cpp
while (j <= right) {
tmp[k++] = nums[j++];
}
(3)🧠 为什么是 j <= right?
-
右半部分是
[mid+1, right] -
一个都不能漏!
(4)✅ 正确答案:D
⚠️ 常见错误:
- 写成
< right→ 最后一个丢了


🌟 第 13 题:电影院排片------贪心算法登场 🎬
(1)🧸 小故事
你是电影院经理 🎟️
只有一个厅,要放 最多不重叠的电影
你该怎么选?
(2)🧠 贪心策略
👉 结束时间早的电影先放!
排序规则
cpp
return a[1] < b[1]; // 按结束时间
更新 lastEnd
cpp
lastEnd = movies[i][1];
(3)✅ 正确答案:B
📌 贪心口诀:
能早结束,就早结束
给后面的留空间

🌟 第 14 题:最大子数组和------这是哪种算法?
(1) 🧸 小故事
小明在一条路上捡金币 💰
有些地方是金币,有些是陷阱
👉 要选 一段连续路,金币最多!
(2) 📘 题目代码特点
-
分左右
-
算中间
-
用递归
(3) 🧠 算法本质
✔ 分治算法
❌ 不是贪心(虽然也有贪心解法)
(4) ❌ 错误说法
👉 B:采用贪心算法
(5) ✅ 正确答案:B


🌟 第 15 题:大整数 +1(进位的艺术) ➕
(1)🧸 小故事
数字是这样存的:
cpp
[1, 2, 9]
表示 129
现在要 +1 🎉
(2)🧠 正确思路
-
从最后一位开始
-
遇到 9 → 变 0,继续进位
(3)正确代码
cpp
digits[i] = 0;
(4)❌ 错误写法
-
设成 9
-
设成 10
-
设成 1