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

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

国际空间研究组织 | ISRO CS 2017 |问题 20

这是一道来自ISRO(印度国际空间研究组织)CS 2017的编程问题。该问题需要我们编写一个程序,以从两个列表中的数字中找到相同的数字,并按从低到高的顺序排序。此外,如果没有找到相同的数字,则输出“-1”。

问题描述

您需要编写一个程序来比较两个长度为n的数组arr1和arr2,其中n是用户输入的数字,两个数组均包含n个数字。程序应按照从小到大的顺序打印两个数组中的共同元素,如果没有找到共同元素,则输出“-1”。

输入
  • 输入的第一行包含一个数字n,表示数组的长度。
  • 输入的第二行包含n个整数,表示数组arr1中的元素。
  • 输入的第三行包含n个整数,表示数组arr2中的元素。
输出
  • 输出应为按顺序排序的公共元素(分隔符为空格),或者如果没有公共元素则为-1。
示例输入输出
输入
7
4 2 73 11 67 39 26
1 93 89 73 67 41 26
输出
26 67 73
解答

一个简单的方法是对两个数组进行排序,然后使用双指针方法依次比较它们。如果两个元素相等,则将它们打印出来并将双指针都向前移动。否则,将小的元素的指针向前移动。

其中,排序的时间复杂度为$O(nlogn)$,双指针的时间复杂度为$O(n)$,故总时间复杂度为$O(nlogn)$。

下面是Python代码的实现:

n = int(input())
arr1 = list(map(int, input().split()))
arr2 = list(map(int, input().split()))

arr1.sort()
arr2.sort()

i = j = 0
result = []

while i < n and j < n:
    if arr1[i] == arr2[j]:
        result.append(arr1[i])
        i += 1
        j += 1
    elif arr1[i] < arr2[j]:
        i += 1
    else:
        j += 1

if not result:
    print(-1)
else:
    print(*result)

其中,input()函数用于从标准输入获取用户的输入。map()函数用于将输入的字符串映射为整数。list()函数用于创建数组。

sort()函数用于对数组进行排序。*result用于将数组中的元素用空格分隔并打印出来。