📅  最后修改于: 2023-12-03 15:37:15.571000             🧑  作者: Mango
这是一道来自ISRO(印度国际空间研究组织)CS 2017的编程问题。该问题需要我们编写一个程序,以从两个列表中的数字中找到相同的数字,并按从低到高的顺序排序。此外,如果没有找到相同的数字,则输出“-1”。
您需要编写一个程序来比较两个长度为n的数组arr1和arr2,其中n是用户输入的数字,两个数组均包含n个数字。程序应按照从小到大的顺序打印两个数组中的共同元素,如果没有找到共同元素,则输出“-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
用于将数组中的元素用空格分隔并打印出来。