acwing基础课——位运算

由数据范围反推算法复杂度以及算法内容 - AcWing

常用代码模板1——基础算法 - AcWing

基本思想:

        我们知道计算机中的数在内存中都是以二进制形式进行存储的 ,而位运算就是直接对整数在内存中的二进制位进行操作,因此其执行效率非常高,在程序中使用位运算进行操作,会大大提高程序的性能。在有些dp等问题中,灵活运用数的二进制来表示某种状态可以大大降低代码的复杂度,位运算很多时候可以将我们的问题简单化,但是并不容易想到,需要一定的积累和对位运算知识的熟练掌握。

        lowbit原理:根据计算机负数表示的特点,如一个数字原码是011111000,他的负数表示形式是补码,也就是反码+1,反码是10000111,加一则是10001000,二者按位与得到了1000,就是我们想要的lowbit操作,即得到最后一位1

801. 二进制中1的个数 - AcWing题库

给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 1 的个数。

输入格式

第一行包含整数 n。

第二行包含 n 个整数,表示整个数列。

输出格式

共一行,包含 n 个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中 1 的个数。

数据范围

1≤n≤100000
0≤数列中元素的值≤10^9

输入样例:

5
1 2 3 4 5

输出样例:

1 1 2 1 2
#include<iostream>

using namespace std;

const int N=100010;
int n;

/*int lowbit(int x)
{
    return x&-x;
}//得到最后一位1  
*/

int main()
{
    cin>>n;
    
    while(n--)
    {
        int res=0;
        int x;
        cin>>x;
        
/*        while(x)
        {
            x-=lowbit(x);
            res++;
        }
*/
        for (int i = x; i; i -= i & -i) res++;
        cout<<res<<" ";
    }
    
    return 0;
}

例题:

90. 64位整数乘法 - AcWing题库

136. 只出现一次的数字 - 力扣(LeetCode)

137. 只出现一次的数字 II - 力扣(LeetCode)

ps:真难想到怎么用位运算去解题啊

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值