📅  最后修改于: 2023-12-03 15:35:55.481000             🧑  作者: Mango
在编程中,有时我们需要找到一个最接近且不超过给定数值的 2 的最大幂次方。在这个主题下,我们将介绍如何在非重复数组中找到最接近的 2 的最大幂次方。
给定一个非重复数组,我们需要找到其中元素的 2 的最大幂次方中最接近且不超过每个元素的数字。
例如,对于数组 [8, 5, 17, 12, 19]
,在 2 的幂次方下最接近且不超过每个元素的数字是 [8, 4, 16, 8, 16]
。
我们可以通过一个简单的算法来解决这个问题。首先,我们需要找到数组中的最大数值 max,然后我们可以使用一个 while 循环来找到最接近且不超过 max 的 2 的最大幂次方。
max = max(arr)
power = 1
while power <= max:
power *= 2
这段代码首先找到了数组中的最大数值 max,并初始化了一个名为 power 的变量为 1。接下来,我们进入一个 while 循环,直到 power 大于 max。在每一次循环中,我们将 power 乘以 2,并继续下一轮循环,从而获取最接近且不超过 max 的 2 的最大幂次方。
现在,我们可以创建一个名为 closest_powers_of_two 的空列表,并使用一个 for 循环来遍历数组中的每个元素。对于每个元素,在最初的 while 循环后,我们将 power 除以 2,并将其添加到 closest_powers_of_two 中。
closest_powers_of_two = []
max = max(arr)
power = 1
while power <= max:
power *= 2
for x in arr:
power /= 2
closest_powers_of_two.append(power)
我们的解决方案现在已经完成!完整代码如下所示:
def closest_powers_of_two(arr):
closest_powers_of_two = []
max = max(arr)
power = 1
while power <= max:
power *= 2
for x in arr:
power /= 2
closest_powers_of_two.append(power)
return closest_powers_of_two
在本主题下,我们了解了如何确定一个最接近且不超过一个数组中每个元素的 2 的最大幂次方。我们的解决方案使用了一个简单的算法,并且已经证明在现实应用中非常实用。