在 Python 中的两个列表中使用贪心算法

Using greedy algorithm within two lists in Python

我们观察到一个由 int 值 n 和两个列表 AB 解释的特定数据样本,其中两个列表包含整数元素或范围从 1n,每个列表中的元素不重复。 (但是,两个列表中可能有相同的元素。)

部分测试用例给出:

n   A       B           return
5   [2, 4]  [1, 3, 5]   5
5   [2, 4]  [3]         4
3   [3]     [1]         2

我知道这是一种贪心算法(我不是很熟悉),但我也尝试了以下方法:

def solution(n, A, B):
    count = n - len(A)
    for i in range(len(B)):
        if B[i]-1 in A:
            count += 1
        elif B[i]+1 in A:
            count += 1
        elif B[i] in A:
            count += 1
        else:
            count += 0
    if n > count:
        answer = count
    else:
        answer = n
    return answer

虽然这看起来可行,但它没有考虑到 B 中的元素一旦放回原处就无法考虑。我可以对我的代码进行任何编辑吗?这个问题将如何得到最佳解决?

我想关键是使用 set() 以便首先检索没有任何重叠元素的集合,然后开始删除已经过去的元素(这与我的初始代码类似)。

def solution(n, A, B):
  B_uniq = set(B)-set(A)
  A_uniq = set(A)-set(B)
  for i in B_uniq:
    if i-1 in A_uniq:
      A_uniq.remove(i-1)
    elif i+1 in A_uniq:
      A_uniq.remove(i+1)
  return n-len(A_uniq)