📅  最后修改于: 2023-12-03 15:37:14.885000             🧑  作者: Mango
在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])
该问题可以通过将数组排序来解决。然后,我们可以计算相邻数字之间的差,找到具有最小差异的数字对。以下是该解决方案的详细步骤:
时间复杂度为O(nlogn),其中n是数组中的元素数量,主要由排序算法决定。空间复杂度为O(1)。