1. 程式人生 > 實用技巧 >5-1 使用者和組群賬戶管理

5-1 使用者和組群賬戶管理

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; } }