给定两个正整数数组 A和B ,只有当两个元素具有相同的值时,数组 B 的元素才能映射到数组A 的元素。任务是计算数组A中数组B 的元素将被映射到的位置。如果无法完成特定元素的映射,则打印 NA。
注意:对于一个位置,只能映射一个整数。
例子:
Input: A[] = {1, 5, 2, 4, 4, 3}, B[] = {1, 2, 5, 1}
Output: 0 2 1 NA
B[0], B[1] and B[2] can be mapped to A[0], A[2] and A[1] respectively but B[3] cannot be mapped to any element of A because the only ‘1’ in A has already been mapped
Input: A[] = {2, 1, 2, 3, 3, 4, 2, 4, 1}, B[] = {1, 2, 5, 1, 2, 4, 2, 3, 2, 1}
Output: 1 0 NA 8 2 5 6 3 NA NA
这个想法是使用一个哈希表,其中键是 A[] 的元素,值是这些元素的索引。由于一个元素可能出现多次,因此我们使用项目列表作为哈希表中的值。
下面是上述问题的实现:
// C++ program to map elements of an array
// to equal elements of another array
#include
using namespace std;
// Function to print the mapping of elements
void printMapping(int A[], int B[], int N, int M)
{
// Create a hash table where all indexes are
// stored for a given value
unordered_map> m;
for (int i=0; i 0)
{
cout << m[B[i]].front() << " ";
m[B[i]].pop_front();
}
else // No mapping found
{
cout << "NA ";
}
}
}
// Driver code
int main()
{
int A[] = {2, 1, 2, 3, 3, 4, 2, 4, 1};
int N = sizeof(A) / sizeof(A[0]);
int B[] = {1, 2, 5, 1, 2, 4, 2, 3, 2, 1};
int M = sizeof(B) / sizeof(B[0]);
printMapping(A, B, N, M);
return 0;
}
输出:
1 0 NA 8 2 5 6 3 NA NA
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。