5-1 使用者和組群賬戶管理
阿新 • • 發佈:2020-08-22
1356. 根據數字二進位制下 1 的數目排序
給你一個整數陣列arr。請你將陣列中的元素按照其二進位制表示中數字 1 的數目升序排序。
如果存在多個數字二進位制中1的數目相同,則必須將它們按照數值大小升序排列。
請你返回排序後的陣列。
示例 1:
輸入:arr = [0,1,2,3,4,5,6,7,8]
輸出:[0,1,2,4,8,3,5,6,7]
解釋:[0] 是唯一一個有 0 個 1 的數。
[1,2,4,8] 都有 1 個 1 。
[3,5,6] 有 2 個 1 。
[7] 有 3 個 1 。
按照 1 的個數排序得到的結果陣列為 [0,1,2,4,8,3,5,6,7]
示例 2:
輸入:arr = [1024,512,256,128,64,32,16,8,4,2,1]
輸出:[1,2,4,8,16,32,64,128,256,512,1024]
解釋:陣列中所有整數二進位制下都只有 1 個 1 ,所以你需要按照數值大小將它們排序。
程式碼:
#include<iostream> #include<bits/stdc++.h> #include<cstring> #include<map> #include<vector> using namespace std; int getBits(int x){int count=0; while (x>0) { x=x&(x-1); count++; } return count; } int main(){ map<int,vector<int> >mymap; int num; cin>>num; mymap[getBits(num)].push_back(num); while(cin.get()!='\n'){ cin>>num; mymap[getBits(num)].push_back(num); }for (map<int,vector<int> >::iterator it=mymap.begin(); it!=mymap.end(); it++) { vector<int> vec=it->second; // cout<<it->first<<" ->"; for (size_t i = 0; i < vec.size(); i++) { cout<<vec[i]<<" "; } // cout<<endl; } }