#5797. A. Remove Smallest
A. Remove Smallest
A. Remove Smallest
🗑️ A. 删除最小值(Remove Smallest)
时间限制: 1 秒 内存限制: 256 MB
📘 题目描述
给定一个由 n 个正整数 组成的数组 a。
你可以进行若干次操作(也可以一次都不做),每次操作规则如下:
-
选择两个不同的下标
i和j(i ≠ j) -
要求:
|a[i] − a[j]| ≤ 1 -
然后 删除这两个元素中较小的那个
- 如果两个元素相等,可以删除任意一个(但只能删除一个)
🎯 任务目标
判断是否 存在一种操作顺序, 使得最终数组中 只剩下一个元素。
你需要对 t 组独立测试用例 分别作出判断。
📥 输入格式
-
第一行:一个整数
t表示测试用例的数量 -
接下来
t组测试用例:-
第一行:一个整数
n表示数组长度 -
第二行:
n个整数a1, a2, …, an表示数组元素
-
📤 输出格式
对于每个测试用例:
- 输出一行
"YES"如果可以通过若干次操作使数组只剩一个元素 - 否则输出
"NO"
📌 数据范围
1 ≤ t ≤ 10001 ≤ n ≤ 501 ≤ a_i ≤ 100
🧪 样例输入
5
3
1 2 2
4
5 5 5 5
3
1 2 4
4
1 3 4 4
1
100
🧪 样例输出
YES
YES
NO
NO
YES
📝 样例说明
样例 1
[1, 2, 2]
- 选
(1, 2),删除 1 →[2, 2] - 再删一个 2 →
[2] - 成功 ✔
样例 2
[5, 5, 5, 5]
任意两两都满足条件,可以一直删到只剩一个。
样例 3
[1, 2, 4]
- 可以删 1 或 2
- 但 2 和 4 的差为 2,无法继续操作
- 失败 ✘
样例 4
[1, 3, 4, 4]
- 3 和 4 可以操作,删 3 →
[1, 4, 4] - 1 与 4 的差大于 1,无法继续
- 失败 ✘
样例 5
[100]
本身只有一个元素,直接满足条件。
🧠 题目关键观察(教学提示)
这是一道思维型 + 排序判断题,核心结论是:
将数组排序后,只要相邻元素的差值都不超过 1,就一定可以删到只剩一个。
为什么?
-
每次只能在「数值相近」的元素之间操作
-
如果排序后出现某一对:
a[i+1] - a[i] > 1那么这两个值之间永远无法再“桥接”,数组会被分成无法继续合并的两部分
🧩 典型解法思路
- 对数组排序
- 检查相邻元素差值
- 若存在差值 > 1 → 输出
NO - 否则 → 输出
YES
- 排序后的整体性质判断
- 将“过程题”转化为“条件判定题”
- 反例思维