第三十天:力扣第1356题,根据数字二进制下1的数目排序
地址:leetcode-cn.com/problems/so…
思路:我的方法也算是暴力解题了吧,我是申明一个二维数组,0位存法当前值,1位存法二进制下1的数目,然后先对0位排序,再对一位排序,记住,不难反次序,要不然会麻烦很多。
var sortByBits = function(arr) {
let res = new Array();
for(let k=0;k < arr.length; k++){
res[k]=[];//二维数组的shenm
}
for(let i = 0; i < arr.length; i++)
{
res[i][0] = arr[i];
let a = 0;
while(res[i][0] != 0){
a += res[i][0] & 1;//获取二进制下1的个数,类似%2
res[i][0] >>= 1;//类似/2
}
res[i][0] = arr[i];
res[i][1] = a;
}
res.sort((a,b) => a[0] - b[0]);//排序
res.sort((a,b) => a[1] - b[1]);
let ref = [];
for(let i = 0; i < arr.length; i++)
{
ref[i] = res[i][0];
}
return ref;
};
执行用时:104 ms, 在所有 JavaScript 提交中击败了93.53%的用户
内存消耗:42.2 MB, 在所有 JavaScript 提交中击败了62.72%的用户