[leetcode] 1356. デジタルバイナリの1の数によるソート (jsで実装)

1.トピック

1356. バイナリの 1 の数で並べ替え
ここに画像の説明を挿入

2.アイデア

  1. 数値 num のバイナリ表現で 1 の数を計算する get1Cnt 関数を定義します。
  • 2 進数の 1 の数を数える方法は、2 進数 num の最後のビットを連続的に取り出し、1 の場合はカウンター a に 1 を加え、num を 1 ビット右にシフトすると、つまり、2 進数の各ビットは num が 0 になるまでトラバースします。
  1. ソートは、数値の 2 進数表現で 1 の数が異なる場合は、1 の数に従って小さいものから大きいものへとソートし、同じ場合は、数値自体の大きさに従って大きいものから小さいものへとソートします。 .

3. コードの実装

/**
 * @param {number[]} arr
 * @return {number[]}
 */
var sortByBits = function(arr) {
    
    
    function get1Cnt(num) {
    
    
        let cnt = 0
        while (num) {
    
    
            // 取个位,如果是1则加到cnt
            cnt += num & 1
            // num右移一位
            num >>= 1
        }
        return cnt
    }
    return arr.sort((a, b) => {
    
    
        return get1Cnt(a) !== get1Cnt(b) ? get1Cnt(a) - get1Cnt(b) : a - b
    })
};

4. 参考

コードは簡潔で、優れたソリューションです

おすすめ

転載: blog.csdn.net/weixin_44109827/article/details/129398787