根据数字二进制下 1 的数目排序
解题思路:
-
此题的考点就是怎么判断出一个数字的二进制有几个 1;
-
式子 n = n&(n-1),例如 n=10110 ,则 n-1=1010,相与之后:10100,将 10110变成了10100,即去掉了 n 的最后一个 1;
-
n&(n-1)所表示的含义为:将最后一位 1 变成 0;
图解:
代码实现
var sortByBits = function (arr) {
// 计算n的二进制中1的数量
const bitCount = n => {
let count = 0;
while (n) {
n &= (n - 1); // 清除最低位的1
count++;
}
return count;
}
// 如果有差,则按 bits 数排,如果无差,则按原值排
return arr.sort((a, b) => bitCount(a) - bitCount(b) || a - b);
};
1351.统计有序矩阵中的负数
上一篇