C++中的__builtin_popcount()

本文介绍C++内置函数__builtin_popcount(),用于计算整数二进制表示中1的个数,并展示如何利用此函数对数组进行排序。具体包括函数原理、LeetCode题目解析及C++代码实现。

函数详解

该函数是C++自带的库函数,内部实现是用查表实现的。
作用:统计数字在二进制下“1”的个数。

 

相关题目

LeetCode:根据数字二进制下 1 的数目排序

给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。
如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。
请你返回排序后的数组。

解题思路
在创建一个数组,如果数字是x,那么就在数组的第x位填写二进制中“1”的个数。最后进行排序,返回数组。

C++代码

class Solution {
    #define N 10010
    int bit[N];
public:
    vector<int> sortByBits(vector<int>& arr) {
        for (int i=0;i<arr.size();i++) bit[arr[i]]=__builtin_popcount(arr[i]);
        sort(arr.begin(),arr.end(),[&](int x,int y){
            return bit[x]==bit[y]?x<y:bit[x]<bit[y];
        });
        return arr;
    }
};
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值