📌  相关文章
📜  国际空间研究组织 | ISRO CS 2013 |问题 23(1)

📅  最后修改于: 2023-12-03 15:37:14.885000             🧑  作者: Mango

ISRO CS 2013 | 问题 23

在ISRO CS 2013年的考试中,有一个与数组和函数有关的问题。该问题需要您在给定的输入中找到两个数字,其差异是最小的。以下是问题描述:

给定一个数组A[],数组中可能包含重复的整数。找到A[]中的两个数字,其差异最小。如果有多个这样的数字对,选择具有最小值的数字对。

例如,如果A[] = {4,2,1,3,5},则数字对(2,3)是具有最小差异的数字对。

题目要求求出具有最小差异的数字对,按最小的数字输出这两个数字。

输入格式

第一行包含一个整数T,表示测试用例的数量。每个测试用例的第一行都包含一个整数N,表示数组中的元素数。第二行包含N个以空格分隔的整数,表示数组的元素。

输出格式

对于每个测试用例,请在新行上输出两个数字,其中第一个数字应该小于第二个数字,并且它们之间的差异最小。

编程语言

您可以使用您所熟悉的任何编程语言来解决此问题。以下是一个Python示例:

t = int(input())
for i in range(t):
    n = int(input())
    a = list(map(int, input().split()))

    a.sort()
    min_diff = a[1] - a[0]
    min_pair = (a[0], a[1])

    for i in range(1, n-1):
        diff = a[i+1] - a[i]
        if diff < min_diff:
            min_diff = diff
            min_pair = (a[i], a[i+1])

    print(min_pair[0], min_pair[1])
解题思路

该问题可以通过将数组排序来解决。然后,我们可以计算相邻数字之间的差,找到具有最小差异的数字对。以下是该解决方案的详细步骤:

  1. 将数组按升序排序。
  2. 初始化一个最小差异,设置为第一个和第二个数字之间的差异,初始化最小数字对为第一个和第二个数字。
  3. 循环遍历数组中的数字,计算当前数字和下一个数字之间的差异。
  4. 如果差异小于当前的最小差异,则更新差异和最小数字对。
  5. 打印最小数字对,其中第一个数字小于第二个数字。
时间和空间复杂度

时间复杂度为O(nlogn),其中n是数组中的元素数量,主要由排序算法决定。空间复杂度为O(1)。