让我们说我需要构造一个算法来确定两个只包含整数的数组是否包含相同的数字。每个值的顺序或数量无关紧要。
以下是一个例子:
{ 1, 2, 3, 4, 100, 120} { 1, 4, 100, 2, 120, 3} -> true
{ 2, 5, 8, -2, -2, 100, 102} { 2, 5, -2, 100, 102} -> false
有什么好方法可以解决这个问题并将其写入伪代码?
答案 0 :(得分:3)
对于每个数组,制作一个已排序的版本并删除重复项。然后,您可以比较这些版本。
或者,在更高级别上,您可以将数组转换为集合(无序的唯一元素集合),然后比较这些集合。
答案 1 :(得分:2)
注意我假设两个数组中匹配元素的基数必须相同才能称之为匹配。在这种情况下,您的示例并未明确要做什么。 @ Gassa的解决方案很好,但有一种更通用的方式来看待这个问题。将每个数组转换为多集,然后比较多个集合。 @ Gassa的排序数组是易于比较的多重集合。但其他多重表示是可能的。计数的哈希映射元素是另一个。平衡的树木是另一种。
在Python中,您可以使用计数哈希方法,如下所示:
def toCountHash(a):
h = {}
for x in a:
if x in h:
h[x] += 1
else:
h[x] = 1
h
def arraysHaveSameElements(a, b):
return toCountHash(a) == toCountHash(b)
最后的优化是使用一个数组将元素添加到单个多重集中,然后使用另一个数组删除它们,如果删除失败或最终结果不是空集,则返回“不相等”。
答案 2 :(得分:0)
最简单的一个(python ish伪代码),尝试阅读并理解代码中发生的事情
count = 0 # keep a counter
for i in array A: # loop through items in A
for j in array B: # nested loop, for every items in A, check if it is in B
if i == j:
count = count + 1 # increment the counter by 1 if it is in B
if count == len(Array A): # check if the counter is the number of elements in A
return true # if so, return true
return false # false, otherwise
答案 3 :(得分:0)
1) Check length for both, If not equal then return false & done i.e they are not equal
2) Otherwise grab one the array in temp variable and loop thru it while removing current index value from the other array.
3) Check if other array is empty. If yes then equal otherwise not equal
确保使用临时变量并复制数组,否则最终可能会从原始数组中删除元素