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

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

国际空间研究组织 | ISRO CS 2014 |问题 3
问题描述

给定一个整数数组,编写一个程序,找到两个数的差最小,这两个数在原数组中的顺序必须是升序。即需要找到a和b,满足 a-b 的值最小,且a必须在b的前面。

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

对于每个测试用例,输出两个整数,分别表示差值最小的两个数字,并按升序排列。如果有多组答案,则返回字典序最小的一对。

示例输入

输入示例1:

2
5
2 4 5 7 9
5
9 7 5 3 1
示例输出

输出示例1:

4 5
7 9
问题分析

本题需要找到两个元素的差值最小,可以先将数组进行排序(升序),然后使用一次遍历,找到相邻元素之间差值的最小值。需要注意,如果有多组答案,则需要返回字典序最小的一对。

参考代码
"""
Author: 朱绍民
Date: 2021/4/23
"""
from typing import List


def find_min_diff(arr: List[int]) -> List[int]:
    # 将数组排序
    arr.sort()
    diff_min = arr[-1] - arr[0]
    res = [arr[0], arr[-1]]
    for i in range(len(arr) - 1):
        diff = arr[i + 1] - arr[i]
        # 找到更小的差值
        if diff <= diff_min:
            diff_min = diff
            res = [arr[i], arr[i + 1]]
    return res


if __name__ == '__main__':
    test_cases = int(input())
    for i in range(test_cases):
        n = int(input())
        arr = list(map(int, input().split()))
        res = find_min_diff(arr)
        print(res[0], res[1])

代码解释请看如下markdown:

请看如下代码: