我的js算法爬坑之旅-根据数字二进制下1的数目排序

93 阅读1分钟

第三十天:力扣第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%的用户