我试图知道两个给定的数组是否相等,与元素的排列无关,但包含相同的元素,并且所有元素的频率必须相同。
int SameArray(int arr1[], int arr2[], int N, int M)
{
unordered_map<int, int> ump;
if(N == M)
{
for(int i = 0; i < N; i++)
{
ump[arr1[i]]++;
}
for(int i = 0; i< M; i++)
{
if(ump.find(arr2[i]) != ump.end())
ump[arr2[i]]--;
}
if(ump.empty())
return 1;
}
return 0;
}
它没有显示任何错误,但输出始终为0。
最佳答案
您正在寻找 std::is_permutation
:
bool SameArray(std::vector<int> arr1, std::vector<int> arr2) {
return std::is_permutation(arr1.begin(), arr1.end(), arr2.begin(), arr2.end());
}
我自由地将您的函数更改为
bool
并将 std::vector
作为函数参数,因为这是C++而不是C。如果您对
std::permutation
的比较如何工作感到好奇,请查看其example implementation。关于c++ - 检查两个数组是否相等,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58392780/