返回

刷题活动:Minimum Absolute Difference-LeetCode 1200

前端

很高兴参加这次刷题打卡活动,它可以让我养成思考、记录、复盘、优化的习惯。我将以容易理解的方式解释LeetCode 1200 - 最小绝对差,并用代码展示如何找到数组中最小绝对差。

问题

给定一个整数数组 arr,找到两个不同下标 ij,使得 arr[i] - arr[j] 的绝对值是最小的。如果有多对 ij 使得 arr[i] - arr[j] 的绝对值相同,则返回所有满足条件的 (i, j) 对。

解决方案:

以下是如何解决这个问题的步骤:

  1. 排序数组 :首先,我们将数组 arr 进行排序。这将帮助我们快速找到最小绝对差。

  2. 遍历数组 :接下来,我们遍历排序后的数组 arr

  3. 计算绝对差 :在遍历过程中,对于每个元素 arr[i],我们计算它与下一个元素 arr[i+1] 的绝对差。

  4. 比较绝对差 :如果当前绝对差小于最小绝对差,则更新最小绝对差。

  5. 存储最小绝对差索引 :同时,我们存储当前最小绝对差对应的索引 ii+1

  6. 继续遍历 :我们继续遍历数组,直到找到所有满足最小绝对差条件的索引对。

  7. 返回结果 :最后,我们返回所有满足最小绝对差条件的索引对。

代码示例:

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)

我希望这次刷题打卡活动能够帮助我提升编程能力,也希望我的分享对其他参与者有所帮助。