位运算

  1. 求某个数是不是2的N次方,要求复杂度为O(1)

漫画:判断2的乘方

  • 用查表的方法是复杂度O(lgn),n为数字大小
  • 用递归的方法是复杂度O(n),n为数字位数
//先找到1,在判断
bool Is2Power(UINT32 num)
{
    if(num==0)
    {
        return true;
    }

    if(num%2==0)
    {
        return Is2Power(num>>2);
    }
    else
    {
        if((num>>2)==0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}
  • 用位运算n&(n-1)得到复杂度为O(1)
  1. 实现一个方法,求出一个正整数转换成二进制后的数字“1”的个数。要求性能尽可能高。
NSInteger value = 111;  
NSInteger count = 0;  
while (value) {  
    NSLog(@"%ld",value&1);  
    int x = value&1;  
    if (x == 1) count++;  
    value = value>>1;  
}  
  1. 其中的扩展题目1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容