📌  相关文章
📜  找出小于或等于给定数字的所有 2 的幂(1)

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

找出小于或等于给定数字的所有 2 的幂

在编程中,我们经常需要找出小于或等于给定数字的所有2的幂。本篇文章将介绍两种常见的算法来解决这个问题,以及它们的时间和空间复杂度。

算法1:暴力枚举

一种直接的算法是从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:位运算

另一种更高效的算法是利用位运算,我们可以将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)。实际应用中,我们应该根据具体情况选择不同的算法来解决问题,以达到最佳效果。