1. 题目来源
2. 题目说明
3. 题目解析
方法一:暴力
思路:
- 统计一个数二进制表示下的所有 1 的位数,可以采用
t &= t - 1
进行统计,是一个代码优化 pair
的sort
排序是先按第一键值排序再按第二键值排序
时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
代码:
class Solution {
public:
vector<int> sortByBits(vector<int>& arr) {
vector<int> ans;
vector<pair<int, int>> tmp;
for (int i = 0; i < arr.size(); ++i) {
int t = arr[i], a = t, cnt = 0;
while (t) t &= t - 1, ++cnt;
tmp.push_back({cnt, a});
}
sort(tmp.begin(), tmp.end());
for (auto e:tmp) ans.push_back(e.second);
return ans;
}
};