返回
刷题活动:Minimum Absolute Difference-LeetCode 1200
前端
2023-09-14 08:49:13
很高兴参加这次刷题打卡活动,它可以让我养成思考、记录、复盘、优化的习惯。我将以容易理解的方式解释LeetCode 1200 - 最小绝对差,并用代码展示如何找到数组中最小绝对差。
问题
给定一个整数数组 arr
,找到两个不同下标 i
和 j
,使得 arr[i] - arr[j]
的绝对值是最小的。如果有多对 i
和 j
使得 arr[i] - arr[j]
的绝对值相同,则返回所有满足条件的 (i, j)
对。
解决方案:
以下是如何解决这个问题的步骤:
-
排序数组 :首先,我们将数组
arr
进行排序。这将帮助我们快速找到最小绝对差。 -
遍历数组 :接下来,我们遍历排序后的数组
arr
。 -
计算绝对差 :在遍历过程中,对于每个元素
arr[i]
,我们计算它与下一个元素arr[i+1]
的绝对差。 -
比较绝对差 :如果当前绝对差小于最小绝对差,则更新最小绝对差。
-
存储最小绝对差索引 :同时,我们存储当前最小绝对差对应的索引
i
和i+1
。 -
继续遍历 :我们继续遍历数组,直到找到所有满足最小绝对差条件的索引对。
-
返回结果 :最后,我们返回所有满足最小绝对差条件的索引对。
代码示例:
def minimum_absolute_difference(arr):
# 排序数组
arr.sort()
# 初始化最小绝对差和索引对
min_abs_diff = float('inf')
min_abs_diff_indices = []
# 遍历数组
for i in range(len(arr) - 1):
# 计算绝对差
abs_diff = abs(arr[i] - arr[i+1])
# 比较绝对差
if abs_diff < min_abs_diff:
# 更新最小绝对差和索引对
min_abs_diff = abs_diff
min_abs_diff_indices = [(i, i+1)]
elif abs_diff == min_abs_diff:
# 添加新的索引对
min_abs_diff_indices.append((i, i+1))
# 返回结果
return min_abs_diff_indices
# 测试用例
arr = [4, 2, 1, 3]
result = minimum_absolute_difference(arr)
print(result)
输出:
[(1, 2), (2, 3)]
在这个例子中,最小绝对差为 1
,由元素 arr[1]
和 arr[2]
之间的差值产生。有两个索引对满足这个条件,即 (1, 2)
和 (2, 3)
。
我希望这次刷题打卡活动能够帮助我提升编程能力,也希望我的分享对其他参与者有所帮助。