B. Shrinking Array
问题描述
一个数组 被称为美丽的,如果:
- 它至少包含两个元素
- 存在一个位置 ,使得
给定一个数组 ,当数组至少有两个元素时,你可以执行以下操作:
- 选择数组 中的两个相邻位置 和
- 选择一个整数 ,使得
- 从数组中移除数字 和 ,并在它们的位置插入数字
每次操作后,数组的大小减少 1。
任务:计算使数组变得美丽所需的最少操作次数,或者报告这是不可能的。
题解
答案只能是 -1、0 或 1。
算法
检查是否已经美丽(答案:0)
- 如果存在两个相邻元素的绝对差 ≤ 1,答案是 0
检查一次操作是否足够(答案:1)
- 对于每对相邻元素,我们可以将它们合并得到一个介于它们之间的新元素
- 检查这个合并位置之前或之后的元素是否会创建一个美丽的数组
- 如果存在任何这样的对,答案是 1
否则(答案:-1)
- 如果不存在任何可以导致美丽数组的相邻元素对,答案是 -1
关键洞察
可以证明,合并超过一对相邻元素无助于得到一个美丽的数组,所以我们只需要考虑最多一次操作。