LeetCode 1356. 根据数字二进制下 1 的数目排序
作者:互联网
题目链接:https://leetcode-cn.com/problems/sort-integers-by-the-number-of-1-bits/
代码:
/* 给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。 请你返回排序后的数组。 */ #include<iostream> #include<vector> #include<algorithm> #include<set> using namespace std; class NumInfo { public: int num; int num_1; public: NumInfo(int n) :num(n) { num_1 = get_num_1(num); } bool operator <(const NumInfo& numInfo)const { if (this->num_1 < numInfo.num_1) { return true; } else if(this->num_1 == numInfo.num_1) { if (this->num < numInfo.num) { return true; } else { return false; } } else { return false; } } private: int get_num_1(int n) { int count = 0; while (n) { ++count; n = (n - 1) & n; } return count; } }; class Solution { public: vector<int> sortByBits(const vector<int>& arr) { if (arr.empty()) { vector<int> result; return result; } vector<NumInfo> numVect; for (auto num : arr) { NumInfo numInfo(num); numVect.push_back(numInfo); } sort(numVect.begin(), numVect.end()); vector<int> result; for (auto num_info : numVect) { result.push_back(num_info.num); } return result; } }; int main() { vector<int> arr{ 10,100,1000,10000 }; Solution solution; vector<int> result = solution.sortByBits(arr); for (auto num : result) { cout << num << " "; } return 0; }
标签:arr,vector,return,二进制,1356,int,num,result,LeetCode 来源: https://www.cnblogs.com/xcxfury001blogs/p/15782616.html