📅  最后修改于: 2023-12-03 15:41:41.450000             🧑  作者: Mango
对于一个数字,如果它的二进制表示中只有某一位为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实现的代码和示例,具体语言的实现可能会有些不同,但是算法的基本思想是一样的。