C++ 中 lowbit(8)为什么等于8?我跟你 不应该该等于4吗?

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

下面这段话源自int64Ago的博客
lowbit(n)就是把n的二进制的高位1全部清空,只留下最低位的1,比如10的二進制是1010,则lowbit(n)=lowbit((2进制)比较普遍的实现方法lowbit(k)=k&-k,这是位运算我们知道一个数加一个负号是把这个数的二进制取反+1,如-10的二进制就是-=0110然后用1010&0110,答案就是0010了!

所以实现方法也就很简单了


 

给定一个整数数组 nums求出数组从索引 ij (ij) 范围内元素的总和,包含 i, j 两点

  • 你可以假设数组不可变。

假设 sumrange 被调用 1000次其参数完全相同。我们怎么能加快速度

 

时间复杂度:烸次查询的时间 O(n2)时间用来预计算。在构造函数中完成的预计算需要 $O(n^2)

  • 上面的方法需要很大的空间我们可以优化它吗?
  • 假设我们预先计算了從数字 0 0 k 的累积和我们可以用这个信息得出

0 0 0 0

现在,我们可以计算 sumrange 如下:

  • 时间复杂度:每次查询的时间 O(N)预计算时间。由于累积和被缓存烸个
版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

下面这段话源自int64Ago的博客
lowbit(n)就是把n的二进制的高位1全部清空,只留下最低位的1,比如10的二進制是1010,则lowbit(n)=lowbit((2进制)比较普遍的实现方法lowbit(k)=k&-k,这是位运算我们知道一个数加一个负号是把这个数的二进制取反+1,如-10的二进制就是-=0110然后用1010&0110,答案就是0010了!

所以实现方法也就很简单了


 

我要回帖

更多关于 我跟你 不应该 的文章

 

随机推荐