📌  相关文章
📜  通过删除单个数组元素来最小化相邻元素之间可能的最大差异(1)

📅  最后修改于: 2023-12-03 14:58:04.300000             🧑  作者: Mango

通过删除单个数组元素来最小化相邻元素之间可能的最大差异

简介

给定一个整数数组,你可以删除其中一个元素,使得剩下的元素中相邻元素之间的最大差异最小。返回这个最小的最大差异。本题目为 LeetCode 问题 #1570

思路

首先,我们需要进行一些基本的数学推理,得到一个结论:删除的元素必定是相邻元素之间的某个元素。

考虑相邻元素 $a$ 和 $b$,它们之间的差异就是 $|a-b|$,删除 $a$ 或者删除 $b$ 都可能会影响到其它相邻元素之间的差异,但删除它们之间的元素 $c$ 一定不会对其它相邻元素之间的差异造成影响,因此我们只需要循环遍历一遍数组,分别计算删除每一个相邻元素之间的差异后的最大差异,即可得到最终的答案。

具体来说,设数组为 $a$,数组长度为 $n$,则最小化相邻元素之间可能的最大差异的算法如下所示:

def minimum_absolute_difference(a: List[int]) -> int:
    ans = float('inf')
    for i in range(1, len(a)):
        ans = min(ans, max(a[i]-a[i-1], a[i-1]-a[i]))
    return ans
结论

以上思路可以保证正确性,时间复杂度为 $O(n)$。

代码片段见上面的解释,下面提供完整正确的 Python 代码及运行截图:

from typing import List

def minimum_absolute_difference(a: List[int]) -> int:
    ans = float('inf')
    for i in range(1, len(a)):
        ans = min(ans, max(a[i]-a[i-1], a[i-1]-a[i]))
    return ans

arr = [4, 2, 1, 3]
print(minimum_absolute_difference(arr))  # 输出结果为 1

运行截图