C++程序 使用另一个数组来最大化元素
给定两个大小为n的数组,通过使用第二个数组中的元素来最大化第一个数组,使得所形成的新数组包含两个数组中n个最大但唯一的元素,第二个数组具有优先权(所有第二个数组的元素出现在第一个数组之前)。输出中元素的出现顺序与输入相同。
示例:
输入:arr1[] = {2, 4, 3}
arr2[] = {5, 6, 1}
输出:5 6 4
因为5、6和4是两个数组中最大的元素,第二个数组优先权更高。元素出现的顺序与输入相同。
输入:arr1[] = {7, 4, 8, 0, 1}
arr2[] = {9, 7, 2, 3, 6}
输出:9 7 6 4 8
方法: 我们创建一个大小为2n的辅助数组,并将第二个数组中的元素存储在其中,然后在其后存储第一个数组中的元素。之后,我们将按递减顺序对辅助数组进行排序。为了根据输入数组保持元素的顺序,我们将使用哈希表。我们将在哈希表中存储前n个最大的唯一元素。现在我们遍历第二个数组,并将在哈希表中存在的第二个数组的元素存储在辅助数组中。类似地,我们将遍历第一个数组并存储在哈希表中存在的元素。通过这种方式,我们从两个数组中获得n个唯一且最大的元素,同时保持元素出现顺序相同。
下面是上述方法的实现:
输出:
时间复杂度 :O(n * log n)。
空间复杂度 :O(n),因为数组和集合已经创建。