在 Python 中查找具有最大位运算 AND 和位运算 OR 的子序列


假设我们有一个由 n 个元素组成的数组,我们需要通过选择数组的两个子序列(它们可以相同也可以不同)来显示最大和,使得第一个子序列的所有元素的按位 AND 运算和与第二个子序列的所有元素的按位 OR 运算和最大。

因此,如果输入类似于 A = {4, 6, 7, 2},那么输出将为 14,因为我们通过仅选择 7 就可以获得最大 AND 值,并通过选择全部(4 | 6 | 7 | 2)= 7 来获得最大 OR 值。因此,结果将为 7 + 7 = 14。

为了解决这个问题,我们将遵循以下步骤 −

  • and_max := 数组的最大值

  • or_max := 0

  • 对于 i 从 0 到数组大小循环执行

    • or_max := or_max OR arr[i]

  • 返回 and_max + or_max

示例 

让我们看看以下实现以获得更好的理解 −

 现场演示

def get_max_sum(arr):
   and_max = max(arr)
   or_max = 0
   for i in range(len(arr)):
      or_max|= arr[i]
   return and_max + or_max
a = [4,6,7,2]
print(get_max_sum(a))

输入

[4,6,7,2]

输出

14

更新于:19-Aug-2020

666 浏览量

启动您的 职业

完成课程获得认证

开始
广告