1356 LeetCode 根据数字二进制下1的数目排序

题目描述:
LeetCode第1356题 根据数字二进制下1的数目排序
类型简单

思路:
非常暴力的解法,花费很多时间
首先把每个数的二进制下1的个数计算出来
然后再把他们进行排序

代码如下:

class Solution {
public:
    int count(int num){
        int s=0;
        while(num!=0){
            if(num%2==1){
            s++;
            num/=2;}
            else num/=2;
        }
        return s;
    }
    vector<int> sortByBits(vector<int>& arr) {
        sort(arr.begin(),arr.end());
        vector<int>res;
        map<int,vector<int>>num;
        vector<int>ber;
        for(int i=arr.size()-1;i>=0;i--){
            num[count(arr[i])].push_back(arr[i]);
            ber.push_back(count(arr[i]));
        }
        sort(ber.begin(),ber.end());
        for(int i=0;i<ber.size();i++){
            res.push_back(num[ber[i]][num[ber[i]].size()-1]);
            num[ber[i]].pop_back();
        }
        return res;
    }
};
发布了224 篇原创文章 · 获赞 0 · 访问量 3119

猜你喜欢

转载自blog.csdn.net/peachzy/article/details/105067167