Aohy的每日一题:1356. 根据数字二进制下 1 的数目排序
hello AOHY ,今天呢做了个决定好好学算法,嗯,力扣每日打卡,希望你能坚持下去。
~~~~~这是链接~
看到题目首先想到的就是暴力排序了,但是注意到 大小是有两个规则
- 二进制表示中1的个数
- (上一个比较不出来啦)原大小比较
所以简单点的想法就是计算每个数二进制表示中1的个数,统计比较输出就行。
然后我去看题解了。
然后我知道了sort的重写规则样式
这样的
class Solution {
public:
static bool cmp(int a, int b)//注意静态
{
int number1 = a, number2 = b, count1 = 0, count2 = 0;
while (number1 != 0)
{//number&1 要打括号哟,我电脑上是报错了的
//或运算 0 & 1 = 0, 1 & 1 = 1 , 0 & 0 = 1, 1 & 0 = 0
count1=(number1&1)==1?count1+1:count1;
number1=number1 >> 1;
}
while (number2 != 0)
{
count2=(number2&1)==1?count2+1:count2;
number2=number2 >> 1;
}
return count1==count2?a<b:count1<count2;
}
vector<int> sortByBits(vector<int> &arr)
{
sort(arr.begin(), arr.end(), cmp);
/*
第一个参数 容器的开始
第二个参数 容器的末尾
第三个 自己重写的静态函数名称
对了 sort 的头文件是 #include <algorithm> (algorithm 算法的意思)
*/
return arr;
}
};
当然啦,力扣上也有很多的题解,大家也可以出门右转。
bey!