跳到主要内容

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

链接:1356.根据数字二进制下1的数目排序
难度:Easy
标签:位运算、数组、计数、排序
简介:给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。

题解 1 - typescript

  • 编辑时间:2020-11-06
  • 执行用时:244ms
  • 内存消耗:44.3MB
  • 编程语言:typescript
  • 解法介绍:利用 toString 转换成二进制进行计算。
function sortByBits(arr: number[]): number[] {
const count = (num: number): number =>
num
.toString(2)
.split('')
.reduce((total, cur) => total + Number(cur), 0);
return arr.sort((a, b) => {
const c1 = count(a);
const c2 = count(b);
return c1 === c2 ? a - b : c1 - c2;
});
}

题解 2 - typescript

  • 编辑时间:2020-11-06
  • 执行用时:104ms
  • 内存消耗:40.7MB
  • 编程语言:typescript
  • 解法介绍:利用位运算计算二进制 1 个数。
function sortByBits(arr: number[]): number[] {
const count = (num: number): number => {
let ans = 0;
while (num) {
num &= num - 1;
ans++;
}
return ans;
};
return arr.sort((a, b) => {
const c1 = count(a);
const c2 = count(b);
return c1 === c2 ? a - b : c1 - c2;
});
}