我有两个列表,我需要确定它们是否包含相同的值而不进行排序(即值的顺序无关)。我知道排序会起作用,但这是性能关键部分的一部分。
项目值落在 [-2, 63] 范围内,我们总是比较相同大小的列表,但列表大小范围为 [1, 8]。
示例列表:
A = (0, 0, 4, 23, 10)
B = (23, 10, 0, 4, 0)
C = (0, 0, 4, 27, 10)
A == B is true
A == C is false
我认为一个可能的解决方案是比较两个列表的乘积(将所有值相乘),但是这个解决方案存在问题。如何处理零和负数。解决方法是在相乘之前将每个值加 4。这是我到目前为止的代码。
bool equal(int A[], int B[], int size)
{
int sumA = 1;
int sumB = 1;
for (int i = 0; i < size; i++) {
sumA *= A[i] + 4;
sumB *= B[i] + 4;
}
return (sumA == sumB)
}
但是,无论列表的顺序/内容是什么,这总是有效吗?换句话说,以下内容在数学上正确吗?所以我真正要问的是以下内容(除非有另一种方法来解决问题):
给定 2 个大小相等的列表。如果列表的乘积(将所有值相乘)相等,则列表包含相同的值,只要这些值是大于 0 的整数。