「leetcode」1356.根据数字二进制下1的数目排序【如何计算二进制中1的数量】详解!
本文 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++学习指南知识点整理
如果感觉题解对你有帮助,不要吝啬给一个
链接:1356. 根据数字二进制下 1 的数目排序 题解:https://leetcode-cn.com/problems/sort-integers-by-the-number-of-1-bits/ ... golang的自定义排序 根据数字二进制下 1 的数目排序 给你一个整数数组 arr .请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序. 如果存在多个数字二进制中 1 的数目相同,则必须 ... 给你一个整数数组 arr .请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序. 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列. 请你返回排序后的数组. 示例 ... 力扣 根据数字二进制下1的数目排序 题目描述 给你一个整数数组 arr .请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序. 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值 ... 给你一个整数数组 arr .请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序. 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列. 请你返回排序后的数组. 示 ... 文章目录 位运算理论+技巧介绍 1.与 & 2.异或 ^ 3.移位及综合运用(指定位置) 4.同或 开撸 1. lc136 只出现一次的数字 2. lc137 只出现一次的数字II 3. lc ... 利用数字技术开展文物保护.文化传承在全世界已经成为了一股强劲的浪潮.中共中央办公厅.国务院办公厅近日印发的<关于推进实施国家文化数字化战略的意见>中提出,到"十四五"时 ... 6月3日,人民创意联合<国家人文历史>首发「诗经」端午主题<采葛><简兮><采蘩><二子乘舟>4幅数字藏品. 为了让更多用户通过数字化感受诗 ... <LeetCode力扣练习>剑指 Offer 15. 二进制中1的个数 Java 一.资源 题目: 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ... [LeetCode]剑指 Offer 15. 二进制中1的个数 文章目录 [LeetCode]剑指 Offer 15. 二进制中1的个数 一.逐位判断 二.巧用 n&(n−1) 一.逐位判断 ...「leetcode」1356.根据数字二进制下1的数目排序【如何计算二进制中1的数量】详解!相关推荐
最新文章
热门文章