📜  数组中一对的最大AND值(1)

📅  最后修改于: 2023-12-03 15:26:10.728000             🧑  作者: Mango

数组中一对的最大AND值

在给定的数组中,找到一对数值的AND值最大。即,找到A[i] AND A[j]的值最大。

解题思路

对于所有的位,我们可以从左向右依次考虑它们是否可以被选中。

首先,我们计算出数组中所有数字二进制展开后的每一位上的1的个数。随后从高位到低位,判断是否可以在这一位上选中两个数的对应位,如果可以,就在对应答案的那一位打上1。

复杂度分析

时间复杂度为 $O(32n)$,空间复杂度为 $O(n)$。

代码实现
def max_and_value(arr):
    n = len(arr)
    count = [0] * 32
    for i in range(n):
        for j in range(32):
            if ((arr[i] >> j) & 1):
                count[j] += 1
    res = 0
    for i in range(32):
        if count[i] > 1:
            res |= 1 << i
    return res
测试样例
assert max_and_value([4, 8, 12, 16]) == 0
assert max_and_value([2, 7, 8, 12]) == 4
assert max_and_value([2, 2]) == 2