📌  相关文章
📜  计算给定数组中存在小于或等于该数字的 2 的最高幂的数组元素(1)

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

计算给定数组中存在小于或等于该数字的 2 的最高幂的数组元素

对于一个数字,如果它的二进制表示中只有某一位为1,那么这个数字是2的幂。

假设现在有一个数组a,需要找到数组中小于或等于一个给定数字n的最大的2的幂的元素。我们可以依次将每个元素与n取与,然后找到这些结果中二进制表示中最后一个为1的位,即最大的2的幂。具体实现可以参考以下代码:

def find_highest_power_of_2(numbers: List[int], n: int) -> List[int]:
    result = []
    for num in numbers:
        result.append(num & ~(num - 1) if num <= n else -1)
    return result

其中,~(num - 1)的作用是将num的二进制表示中最后一个1之后的所有位都变成1,然后取反。这样就得到了num的二进制表示中最后一个1之前的所有位都为0,最后一个1之后的所有位都为1的数字。

最后,我们就可以得到一个列表,其中每个元素表示数组a中对应位置上的元素小于或等于n的最大的2的幂,如果不存在这样的元素,则返回-1。

我们可以像这样使用这个函数:

a = [3, 6, 7, 10, 15, 26]
n = 8
print(find_highest_power_of_2(a, n))  # [2, 2, -1, 2, -1, -1]

以上是用Python实现的代码和示例,具体语言的实现可能会有些不同,但是算法的基本思想是一样的。