本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略、各个类型经典题目刷题顺序、思维导图,可以fork到自己仓库,有空看一看一定会有所收获,如果对你有帮助也给一个star支持一下吧!

题目链接

https://leetcode-cn.com/problems/sort-integers-by-the-number-of-1-bits/

思路

这道题其实是考察如何计算一个数的二进制中1的数量。

我提供两种方法:

  • 方法一:

朴实无华挨个计算1的数量,最多就是循环n的二进制位数,32位。

int bitCount(int n) {int count = 0; // 计数器while (n > 0) {if((n & 1) == 1)  count++;  // 当前位是1,count++n >>= 1 ; // n向右移位}return count;
}
  • 方法二

这种方法,只循环n的二进制中1的个数次,比方法一高效的多

int bitCount(int n) {int count = 0;while (n) {n &= (n - 1); // 清除最低位的1count++;}return count;
}

以计算8的二进制1的数量为例,如图所示:

下面我就使用方法二,来做这道题目:

C++代码

class Solution {
private:static int bitCount(int n) { // 计算n的二进制中1的数量int count = 0;while(n) {n &= (n -1); // 清除最低位的1count++;}return count;}static bool cmp(int a, int b) {int bitA = bitCount(a);int bitB = bitCount(b);if (bitA == bitB) return a < b; // 如果bit中1数量相同,比较数值大小return bitCount(a) < bitCount(b); // 否则比较bit中1数量大小}
public:vector<int> sortByBits(vector<int>& arr) {sort(arr.begin(), arr.end(), cmp);return arr;}
};

我是程序员Carl,利用工作之余重刷leetcode,更多精彩算法文章尽在:代码随想录,关注后,回复「Java」「C++」「python」「简历模板」等等,有我整理多年的学习资料,可以加我微信,备注「简单自我介绍」+「组队刷题」,拉你进入刷题群,每天一道经典题目分析,我选的每一道题目都不是孤立的,而是由浅入深一脉相承的,如果跟住节奏每篇连续着看,定会融会贯通。

以下资料希望对你有帮助:

  • Carl的开源项目以及开源项目
  • Carl的B站视频:算法和编程语言的讲解
  • C++面试&C++学习指南知识点整理

如果感觉题解对你有帮助,不要吝啬给一个

「leetcode」1356.根据数字二进制下1的数目排序【如何计算二进制中1的数量】详解!相关推荐

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

    链接:1356. 根据数字二进制下 1 的数目排序 题解:https://leetcode-cn.com/problems/sort-integers-by-the-number-of-1-bits/ ...

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

    golang的自定义排序 根据数字二进制下 1 的数目排序 给你一个整数数组 arr .请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序. 如果存在多个数字二进制中 1 的数目相同,则必须 ...

  3. leetcode 1356. 根据数字二进制下 1 的数目排序(排序)

    给你一个整数数组 arr .请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序. 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列. 请你返回排序后的数组. 示例 ...

  4. 力扣 根据数字二进制下1的数目排序

    力扣 根据数字二进制下1的数目排序 题目描述 给你一个整数数组 arr .请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序. 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值 ...

  5. 1356. Sort Integers by The Number of 1 Bits 根据数字二进制下 1 的数目排序

    给你一个整数数组 arr .请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序. 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列. 请你返回排序后的数组.   示 ...

  6. LeetCode位运算(找出落单的数,二进制中1的个数,2的幂等)

    文章目录 位运算理论+技巧介绍 1.与 & 2.异或 ^ 3.移位及综合运用(指定位置) 4.同或 开撸 1. lc136 只出现一次的数字 2. lc137 只出现一次的数字II 3. lc ...

  7. 人民创意联合《国家人文历史》独家首发「诗经」端午主题数字藏品

    利用数字技术开展文物保护.文化传承在全世界已经成为了一股强劲的浪潮.中共中央办公厅.国务院办公厅近日印发的<关于推进实施国家文化数字化战略的意见>中提出,到"十四五"时 ...

  8. 「诗经」主题文化数字藏品中奖名单公布

    6月3日,人民创意联合<国家人文历史>首发「诗经」端午主题<采葛><简兮><采蘩><二子乘舟>4幅数字藏品. 为了让更多用户通过数字化感受诗 ...

  9. 《LeetCode力扣练习》剑指 Offer 15. 二进制中1的个数 Java

    <LeetCode力扣练习>剑指 Offer 15. 二进制中1的个数 Java 一.资源 题目: 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ...

  10. 【LeetCode】剑指 Offer 15. 二进制中1的个数

    [LeetCode]剑指 Offer 15. 二进制中1的个数 文章目录 [LeetCode]剑指 Offer 15. 二进制中1的个数 一.逐位判断 二.巧用 n&(n−1) 一.逐位判断 ...

最新文章

  1. Mac下Jenkins+SVN+Xcode构建持续
  2. MySQL(22)--- NULL 值处理
  3. Java基础学习总结(29)——浅谈Java中的Set、List、Map的区别
  4. mysql 存储过程参数集合_MySQL存储过程
  5. easypoi list中的map导出_EasyPOI简单用例,简单有效
  6. html 百度地图坐标拾取,百度地图坐标拾取系统
  7. 五十个产品可靠性性能提高的方法详解
  8. 浮动定位弹性页面的布局。
  9. 武大计算机导师蔡贤涛,CAD模型在线集成与离线集成关键技术研究
  10. 为什么域名还会被DNS污染?域名被污染清洗方法!
  11. 未明学院数据分析报告:谁才是淘宝沙发界最受瞩目的明星店铺?大数据分析助你做“星探”!
  12. java语音从哪里开始学_想学习编程,应该从哪里开始学习呢?
  13. 三维坐标要建一个4*4的矩阵?
  14. Android学习之仿QQ讨论组和微信群聊头像
  15. 基于头条新闻数据的文本分类系统实战
  16. CSS里的 no-repeat 是什么意思
  17. 代码坏的味道07:依恋情结(Feature Envy)
  18. html5红外遥控,做了个小的红外遥控装置
  19. Virtualbox虚拟机报错“VDI: invalid pre-header in ”
  20. 曲线回归------(二)多项式回归

热门文章

  1. SSL For Free 免费 SSL 凭证申请 Let’s Encrypt
  2. 字符编码【utf8,unicode,ANSI,ascii】
  3. mysql:字符串拼接
  4. memcached学习(5). memcached的应用和兼容程序
  5. 感知机原理及代码实现小结
  6. input el-input 打印是取不到值 print()
  7. 缓存穿透缓存雪崩,缓存击穿,django的6种缓存数据
  8. 基于RPC原理的Dubbo
  9. [iOS]深入浅出 iOS 之多线程 NSThread
  10. 02 - 体系结构概述