1356. 根据数字二进制下 1 的数目排序 - 力扣(LeetCode)
简单题,自己设计一个排序规则就可以了,可以使用bitset简化操作:
class Solution {
public:
struct cmp{
bool operator()(int a, int b){
if(bitset<14>(a).count() == bitset<32>(b).count()) return a < b;//最大10^4
return bitset<14>(a).count() < bitset<32>(b).count();
}
};
static bool cmp1(int a, int b){//加上static
if(bitset<14>(a).count() == bitset<32>(b).count()) return a < b;//最大10^4
return bitset<14>(a).count() < bitset<32>(b).count();
}
vector<int> sortByBits(vector<int>& arr) {
sort(arr.begin(), arr.end(), cmp1);
//sort(arr.begin(), arr.end(), cmp());
return arr;
}
};
当然,数字的二进制表示中1的个数,也可以通过移位计算得来:
int count(int num){//移位统计二进制中1的个数
int res = 0;
while(num){
res += (num & 1);
num >>= 1;
}
return res;
}