一尘不染

在两个不同大小的数组中查找公共元素

algorithm

我很难找到两个数组中的公共元素,而且大小不同。

取,A1大小n数组A2和大小数组m,以及m != n

到目前为止,我已经尝试过一个一个地迭代列表并将元素复制到另一个列表。如果该元素已经包含mark,但我知道这不是一个好的解决方案。


阅读 281

收藏
2020-07-28

共1个答案

一尘不染

对数组进行排序。然后使用两个指针遍历它们,始终使一个指针指向较小的值。当它们指向相等的值时,您将拥有一个共同的价值。这将是O(n +
m),其中n和m是两个列表的大小。就像在merge
sort
中进行合并一样,但是只有在所指向的值相等时才产生输出。

def common_elements(a, b):
  a.sort()
  b.sort()
  i, j = 0, 0
  common = []
  while i < len(a) and j < len(b):
    if a[i] == b[j]:
      common.append(a[i])
      i += 1
      j += 1
    elif a[i] < b[j]:
      i += 1
    else:
      j += 1
  return common

print 'Common values:', ', '.join(map(str, common_elements([1, 2, 4, 8], [1, 4, 9])))

输出

Common values: 1, 4

如果元素不可比较,则将一个列表中的元素放入哈希图中,然后对照哈希图检查第二个列表中的元素。

2020-07-28