首页 > 解决方案 > 检查两个数组是否相等

问题描述

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

    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。

标签: c++arraysalgorithmequalityunordered-map

解决方案


您正在寻找std::is_permutation

bool SameArray(const std::vector<int>& arr1, const std::vector<int>& arr2) {
    return std::is_permutation(arr1.begin(), arr1.end(), arr2.begin(), arr2.end());
}

我冒昧地将您的函数返回更改为bool并将std::vectors 作为函数参数,因为这是 C++ 而不是 C。

如果您对比较的工作原理感到好奇std::permutation,请查看其示例实现


推荐阅读