检查两个数组是否相等

17 Mar 2025 | 6 分钟阅读

让我们通过一些例子来理解这个问题。

如果数组 arr1=[1,2,3,4,5] 和 arr2 = [5,4,3,2,1] 是两个数组,我们需要检查这两个数组是否相等。

如果两个数组具有相同的元素,并且这些元素在各自数组中的出现频率相同,则认为它们相等。

让我们以上面的例子为例

arr1 中的所有元素都存在于 arr2 中,并且 arr1 中的每个元素都只出现一次。同样,arr2 中的元素也只出现一次,并且没有元素存在于 arr1 中但不存在于 arr2 中,反之亦然。

让我们再举一个例子

如果 arr1=[1,2,3,4,4] 且 arr2=[1,1,2,3,4]

在上面的两个数组中,arr1 中存在的所有元素也都存在于 arr2 中,但在 arr1 中,元素 4 出现了两次,而在 arr2 中,它只出现了一次。元素 1 在 arr2 中出现了两次,但在 arr1 中只出现了一次,因此我们可以得出结论,两个数组不相等。

让我们看最后一个例子

Arr1=[1,2,3,4] arr2=[2,3,4,5],在这种情况下,两个数组不相等,因为元素 1 存在于 arr1 中,但不存在于 arr2 中;元素 5 存在于 arr2 中,但不存在于 arr1 中,因此它们不相等。

我们需要部署一个代码来确定两个输入数组是否相等。

代码

输出

Check if two arrays are equal or not
Check if two arrays are equal or not
Check if two arrays are equal or not

解释

让我们讨论代码的逻辑

我们需要找出 arr1 中的所有元素是否与 arr2 中的所有元素相等,且频率相同。

所以,首先,我们需要对两个数组进行排序,然后从第一个索引开始比较两个数组的元素。

即,在对两个数组进行排序后,我们需要检查两个数组中的所有元素是否在相同的索引处相等。

特定索引处的元素应该相同,因为我们正在对数组进行排序,并且为了使两个数组相等,它们还需要具有相同的频率,以便两个数组在相同的索引处具有相同的值。

因此,我们的逻辑是对给定的数组进行排序,然后比较两个数组的元素。

首先,我们需要从用户那里获取输入大小和数组元素。

上述代码行将从用户那里获取 n 大小和两个数组元素的输入。

接下来,我们需要对两个数组进行排序。我们有一个直接的函数叫做 sort,它接受两个数组参数。

上述两行代码将对两个数组进行排序。

接下来,我们需要验证两个数组中所有元素在各自索引处是否相等,为此,我们需要一个 for 循环来遍历。

如果任何索引处的值不相等,我们将打印“两个数组不相等”;如果对于整个数组,所有值都自动相等,则将打印“两个数组相等”。

为了打印数组是否相等,我们需要上面的代码行;如果两者不相等,它将打印“两个数组不相等”并退出代码。

这就是我们将执行代码以检查两个数组是否相等的方式。

让我们讨论时间和空间复杂度

时间复杂度:如果我们忽略输入所花费的时间,那么时间主要消耗在对给定数组进行排序上,然后我们需要遍历数组以检查两个数组的所有索引值是否相等。

因此,arr1 排序的总时间为 O(n*log*n) + arr2 排序的总时间为 O(n*log(n)),所以对于排序,我们将其视为 O(n*log(n))。

接下来,我们需要遍历时间,即 O(n)。

总花费时间为 O(n)+O(n*log(n))。

最终,我们将时间复杂度视为 O(n*log(n))

空间复杂度

我们这里没有使用任何额外的空间;我们只使用了给定的输入数组,所以空间是常数 O(1)

时间复杂度: O(n*log(n))

空间复杂度: O(1)

让我们讨论另一种方法来降低上述代码的时间复杂度

为了降低上述代码的时间复杂度,我们需要使用哈希表。

逻辑是。首先,我们需要将数组 1 的所有元素推入映射中,然后,在遍历第二个数组时,我们需要减少映射中元素的计数;如果元素的计数为零,或者如果元素不存在于映射中,则表明该数字可能出现频率不同,或者存在仅在一个数组中出现的缺失数字。

如果上述两个条件对于整个数组都不满足,那么我们可以说两个数组相等。

所以,让我们部署代码,使用映射来查找两个数组是否相等。

代码

输出

Check if two arrays are equal or not
Check if two arrays are equal or not
Check if two arrays are equal or not

解释

首先,我们需要输入数组的大小和数组元素。

上述代码将处理从用户获取输入的情况。

在从用户获取 arr1 元素的输入时,我们还将元素推入名为 mp 的映射中。

因此,在获取输入值时,它们被插入到映射中。

将其插入到映射中后,我们需要遍历第二个数组并检查两个条件:一个是元素是否不存在于映射中,另一个是元素计数是否为 0。如果满足任何条件,我们需要打印两个数组不相等,然后我们退出代码。

如果上述两个条件对于整个第二个向量元素都不满足,我们打印两个数组相等。

我们需要上述代码来打印数组是否相等。

这就是我们将如何实现代码以了解两个数组是否相等。

让我们讨论一下代码的时间和空间复杂度

时间复杂度:如果我们忽略获取输入所花费的时间,则只需要遍历第二个数组,在最坏的情况下,遍历第二个数组所花费的时间是 O(n)。

时间复杂度:O(n)。

空间复杂度:在此代码中,我们需要哈希映射的空间来存储第一个数组的值,因此所需的空间为 O(N)。

空间复杂度:O(n)。