#5797. A. Remove Smallest

A. Remove Smallest

A. Remove Smallest

🗑️ A. 删除最小值(Remove Smallest)

时间限制: 1 秒 内存限制: 256 MB


📘 题目描述

给定一个由 n 个正整数 组成的数组 a

你可以进行若干次操作(也可以一次都不做),每次操作规则如下:

  • 选择两个不同的下标 iji ≠ j

  • 要求:

    |a[i] − a[j]| ≤ 1
    
  • 然后 删除这两个元素中较小的那个

    • 如果两个元素相等,可以删除任意一个(但只能删除一个)

🎯 任务目标

判断是否 存在一种操作顺序, 使得最终数组中 只剩下一个元素

你需要对 t 组独立测试用例 分别作出判断。


📥 输入格式

  • 第一行:一个整数 t 表示测试用例的数量

  • 接下来 t 组测试用例:

    • 第一行:一个整数 n 表示数组长度

    • 第二行:n 个整数

      a1, a2, …, an
      

      表示数组元素


📤 输出格式

对于每个测试用例:

  • 输出一行 "YES" 如果可以通过若干次操作使数组只剩一个元素
  • 否则输出 "NO"

📌 数据范围

  • 1 ≤ t ≤ 1000
  • 1 ≤ n ≤ 50
  • 1 ≤ 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. 对数组排序
  2. 检查相邻元素差值
  3. 若存在差值 > 1 → 输出 NO
  4. 否则 → 输出 YES
  • 排序后的整体性质判断
  • 将“过程题”转化为“条件判定题”
  • 反例思维