Skip to content

E1356.根据数字二进制下 1 的数目排序

bit manipulation, https://leetcode.cn/problems/sort-integers-by-the-number-of-1-bits/

思路:学会了内置的 __builtin_popcount 用于计算二进制中 1 的个数

cpp
#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    vector<int> sortByBits(vector<int>& arr) {
        sort(arr.begin(), arr.end(), [](int a, int b) {
            // __builtin_popcount 用于计算一个整数的二进制表示中 1 的个数
            // 可用 while(n) { if (n & 1) count++; n >>= 1; } 实现
            int count_a = __builtin_popcount(a);
            int count_b = __builtin_popcount(b);
            if (count_a == count_b) {
                return a < b;
            }
            return count_a < count_b;
        });
        return arr;
    }
};

用时5min