📅  最后修改于: 2023-12-03 15:39:45.003000             🧑  作者: Mango
在编程中,我们经常需要找出小于或等于给定数字的所有2的幂。本篇文章将介绍两种常见的算法来解决这个问题,以及它们的时间和空间复杂度。
一种直接的算法是从1开始,不断乘以2直到结果大于给定数字。这种算法的时间复杂度为O(log n),空间复杂度为O(1)。
def powerOfTwo(n):
i = 1
result = []
while i <= n:
result.append(i)
i *= 2
return result
print(powerOfTwo(10)) #[1, 2, 4, 8]
另一种更高效的算法是利用位运算,我们可以将2的幂表达为一个数的二进制表示中只有一位是1,其余位皆为0。因此我们可以通过位运算来判断一个数是否是2的幂。这种算法的时间复杂度为O(log n),空间复杂度为O(1)。
def powerOfTwo(n):
result = []
for i in range(n+1):
if i & (i-1) == 0:
result.append(i)
return result
print(powerOfTwo(10)) #[1, 2, 4, 8]
本篇文章中,我们介绍了两种解决找出小于或等于给定数字的所有2的幂的常用算法。暴力枚举算法时间复杂度为O(log n),空间复杂度为O(1)。位运算算法时间复杂度为O(log n),空间复杂度为O(1)。实际应用中,我们应该根据具体情况选择不同的算法来解决问题,以达到最佳效果。