没有冗余的两个数组中的公共数字?

时间:2015-01-04 12:16:38

标签: arrays pascal

我遇到了这个问题〜所以它基本上用0和9之间的随机整数填充两个大小相同的数组(例如T1和T2),然后在两个数组之间搜索公共数字将它们保存在另一个没有冗余的阵列(T3)中,例如,如果T1有4,5,0,6,4,2和T2有0,9,1,5,7,4 T3将是4,5,0只有不必重复4次〜我已经完成了大部分事情,但如果数字在阵列中存在多次,仍然坚持如何保存一次〜我使用pascal btw但是如果你不喜欢#39;知道它的语法,没关系,请告诉我英文如何解决这个问题! ! !

1 个答案:

答案 0 :(得分:2)

由于范围限制为0..9,您可以简单地使用一些额外的数组来指示找到该数字的源数组。检查以下伪代码和描述:

array T1 = (4,5,0,6,4,2);
array T2 = (0,9,1,5,7,4);

array foundInT1 = (false, 10 times)
array foundInT2 = (false, 10 times)
for each element in T1:
    foundInT1[element] = true
for each element in T2:
    foundInT2[element] = true

array T3 = ()
for each element in 0..9 inclusive:
    if foundInT1[element] and foundInT2[element]:
        T3.append(element)

因此,基本思想是拥有两个十元素数组,每个数组对应一个源列表。他们事先都被初步化为假。

然后,对于T1中的每个元素,在foundInT1数组中将相应的条目设置为true。将其设置为true将简单地忽略可能存在重复的事实,因为重复只会将其再次设置为true(实际上不做任何更改)。

同样适用于T2foundInT2数组。然后你有两个包含可以使用索引进行关联的信息的数组。

完成后,只需循环浏览所有可能的数字0..9,并且只要在T1T2中找到它们,就将它们添加到(最初为空){{1} }}

更详细:

T3

然后,当你把两个input foundInT1 foundInT2 0123456789 0123456789 ===== ========== ========== .......... .......... t1=4 ....t..... .......... t1=5 ....tt.... .......... t1=0 t...tt.... .......... t1=6 t...ttt... .......... t1=4 t...ttt... .......... t1=2 t.t.ttt... .......... t2=0 t.t.ttt... t......... t2=9 t.t.ttt... t........t t2=1 t.t.ttt... tt.......t t2=5 t.t.ttt... tt...t...t t2=7 t.t.ttt... tt...t.t.t t2=4 t.t.ttt... tt..tt.t.t 数组放在一起时:

foundInTx

您可以看到两个数组中的唯一值是 0123456789 ========== t.t.ttt... & tt..tt.t.t ========== t...tt....

以下Python代码显示了概念验证:

(0,4,5)

运行时,输出为:

t1 = [4,5,0,6,4,2]
t2 = [0,9,1,5,7,4]

inT1 = [False] * 10
inT2 = [False] * 10

for elem in t1: inT1[elem] = True
for elem in t2: inT2[elem] = True

t3 = []
for elem in range(10):
    if inT1[elem] and inT2[elem]:
        t3.append(elem)

print "t1   =", t1
print "t2   =", t2
print "inT1 =", inT1
print "inT2 =", inT2
print "t3   =", t3