# -*- coding: utf-8 -*-
'''
Python程序员面试算法宝典---解题总结: 第4章 数组 4.22 如何从三个有序数组中找出它们的公共元素
题目:
给定以非递减顺序排序的三个数组,找出这三个数组中的所有公共元素。例如,
给出下面三个数组:
ar1 = [2, 5, 12, 20, 45, 85]
ar2 = [16, 19, 20, 85, 200]
ar3 = [3, 4, 15, 20, 39, 72, 85, 190]
那么这三个数组的公共元素为[20, 85]。
分析:
可以分别令三个数组遍历下标为i,j,k
初始都为0,
然后如果ar1[i] = ar2[j] = ar3[k]
那么ar1[i]就是公共元素;
否则,从3个元素中找出最小的两个元素所在的数组对应的
遍历下标,让遍历下标都+1.
继续重复上述循环,直到遍历完所有数组。
关键:
参考:
Python程序员面试算法宝典
'''
def findCommonElements(ar1, ar2, ar3):
results = []
if not ar1 or not ar2 or not ar3:
return results
len1 = len(ar1)
len2 = len(ar2)
len3 = len(ar3)
i = 0
j = 0
k = 0
while i < len1 and j < len2 and k < len3:
if ar1[i] == ar2[j] and ar1[i] == ar3[k]:
results.append(ar1[i])
i += 1
j += 1
k += 1
else:
maxValue = max(ar1[i], ar2[j], ar3[k])
if ar1[i] != maxValue:
i += 1
if ar2[j] != maxValue:
j += 1
if ar3[k] != maxValue:
k += 1
return results
def process():
ar1 = [2, 5, 12, 20, 45, 85]
ar2 = [16, 19, 20, 85, 200]
ar3 = [3, 4, 15, 20, 39, 72, 85, 190]
results = findCommonElements(ar1, ar2, ar3)
print results
if __name__ == "__main__":
process()