我试图知道两个给定的数组是否相等,与元素的排列无关,但包含相同的元素,并且所有元素的频率必须相同。

    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/

10-08 23:20