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

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!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值