国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

(位運算) 1356. 根據(jù)數(shù)字二進制下 1 的數(shù)目排序 ——【Leetcode每日一題】

這篇具有很好參考價值的文章主要介紹了(位運算) 1356. 根據(jù)數(shù)字二進制下 1 的數(shù)目排序 ——【Leetcode每日一題】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

? 1356. 根據(jù)數(shù)字二進制下 1 的數(shù)目排序

難度:簡單

給你一個整數(shù)數(shù)組 arr 。請你將數(shù)組中的元素按照其二進制表示中數(shù)字 1 的數(shù)目升序排序。

如果存在多個數(shù)字二進制中 1 的數(shù)目相同,則必須將它們按照數(shù)值大小升序排列。

請你返回排序后的數(shù)組。

示例 1:

輸入:arr = [0,1,2,3,4,5,6,7,8]
輸出:[0,1,2,4,8,3,5,6,7]
解釋:[0] 是唯一一個有 0 個 1 的數(shù)。
[1,2,4,8] 都有 1 個 1 。
[3,5,6] 有 2 個 1 。
[7] 有 3 個 1 。
按照 1 的個數(shù)排序得到的結(jié)果數(shù)組為 [0,1,2,4,8,3,5,6,7]

示例 2:

輸入:arr = [1024,512,256,128,64,32,16,8,4,2,1]
輸出:[1,2,4,8,16,32,64,128,256,512,1024]
解釋:數(shù)組中所有整數(shù)二進制下都只有 1 個 1 ,所以你需要按照數(shù)值大小將它們排序。

示例 3:

輸入:arr = [10000,10000]
輸出:[10000,10000]

示例 4:

輸入:arr = [2,3,5,7,11,13,17,19]
輸出:[2,3,5,17,7,11,13,19]

示例 5:

輸入:arr = [10,100,1000,10000]
輸出:[10,100,10000,1000]

提示

  • 1 < = a r r . l e n g t h < = 500 1 <= arr.length <= 500 1<=arr.length<=500
  • 0 < = a r r [ i ] < = 1 0 4 0 <= arr[i] <= 10^4 0<=arr[i]<=104

??思路:位運算

對位運算基本操作還不太懂的小伙伴可以看我另一篇博客:一篇文章搞懂位運算!!!

法一:仿函數(shù) + 位運算

  • 使用位運算,去除最低的那一位 1,來統(tǒng)計 1 的個數(shù);
  • 然后根據(jù)仿函數(shù)的定義,重新定義比較函數(shù) 4cmp;
  • 最后使用 sort 函數(shù)重新排序,并使用我們自己定義的比較函數(shù)。

法二:數(shù)學(xué) + 位運算

  • 由題目提示, 0 < = a r r [ i ] < = 1 0 4 0 <= arr[i] <= 10^4 0<=arr[i]<=104,所以 arr[i] 二進制1不超過 14個,占十進制中的兩位;且先比較二進制中 1 的個數(shù),所以個數(shù)可以占高位,乘以 100000;

  • 若1 的個數(shù)相同,則比較 arr[i],即最后再加上 arr[i];

  • 然后用 sort 進行排序,最后再取余,即為答案;

??代碼:(C++、Java)

法一:仿函數(shù) + 位運算
C++

class Solution {
private:
    static int bitCount(int num){
        int count = 0;
        while(num > 0){
            num &= (num - 1);
            count++;
        }
        return count;
    }
    static bool cmp(int a, int b){
        int bitA = bitCount(a);
        int bitB = bitCount(b);
        if(bitA == bitB) return a < b;
        return bitA < bitB;
    }
public:
    vector<int> sortByBits(vector<int>& arr) {
        sort(arr.begin(), arr.end(), cmp);
        return arr;
    }
};

法二:數(shù)學(xué) + 位運算

C++

class Solution {
private:
    static int bitCount(int num){
        int count = 0;
        while(num > 0){
            num &= (num - 1);
            count++;
        }
        return count;
    }
public:
    vector<int> sortByBits(vector<int>& arr) {
        vector<int> map(arr.size());
        for(int i = 0; i < arr.size(); i++){
            map[i] = bitCount(arr[i]) * 100000 + arr[i];
        }
        sort(map.begin(), map.end());
        for(int i = 0; i < map.size(); i++){
            map[i] %= 100000;
        }
        return map;
    }
};

Java

class Solution {
    public int[] sortByBits(int[] arr) {
        int[] map = new int[arr.length];
        for(int i = 0; i < arr.length; i++){
            map[i] = Integer.bitCount(arr[i]) * 100000 + arr[i];
        }
        Arrays.sort(map);
        for(int i = 0; i < map.length; i++){
            map[i] %= 100000;
        }
        return map;
    }
}
?? 運行結(jié)果:

(位運算) 1356. 根據(jù)數(shù)字二進制下 1 的數(shù)目排序 ——【Leetcode每日一題】,LeetCode,leetcode,算法,職場和發(fā)展

?? 復(fù)雜度分析:
  • 時間復(fù)雜度 O ( n l o g n ) O(nlogn) O(nlogn),其中 n 為數(shù)組的長度,。
  • 空間復(fù)雜度 O ( 1 ) O(1) O(1),法二為 O ( n ) O(n) O(n)

題目來源:力扣。

放棄一件事很容易,每天能堅持一件事一定很酷,一起每日一題吧!
關(guān)注我LeetCode主頁 / CSDN—力扣專欄,每日更新!文章來源地址http://www.zghlxwxcb.cn/news/detail-524255.html

注: 如有不足,歡迎指正!

到了這里,關(guān)于(位運算) 1356. 根據(jù)數(shù)字二進制下 1 的數(shù)目排序 ——【Leetcode每日一題】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【位運算】二進制狀態(tài)壓縮、成對變換、lowbit運算

    二進制狀態(tài)壓縮,是指將一個長度為 m m m 的 bool 數(shù)組用一個 m m m 位二進制整數(shù)表示并存儲的方法。 利用下列位運算操作可以實現(xiàn)原 bool 數(shù)組中對應(yīng)下標(biāo)元素的存取。 操作 運算 取出整數(shù) n n n 在二進制表示下的第 k k k 位 (n k) 1 取出整數(shù) n n n 在二進制表示下的第 0 0 0 ~ k ?

    2024年02月08日
    瀏覽(18)
  • 【第36天】組合位運算訓(xùn)練 | 二進制思想

    本文已收錄于專欄 ??《Java入門一百例》??

    2024年02月01日
    瀏覽(19)
  • ( 位運算 ) 190. 顛倒二進制位 ——【Leetcode每日一題】

    ( 位運算 ) 190. 顛倒二進制位 ——【Leetcode每日一題】

    難度:簡單 顛倒給定的 32 位無符號整數(shù)的二進制位。 提示: 請注意,在某些語言(如 Java )中,沒有無符號整數(shù)類型。在這種情況下,輸入和輸出都將被指定為有符號整數(shù)類型,并且不應(yīng)影響您的實現(xiàn),因為無論整數(shù)是有符號的還是無符號的,其內(nèi)部的二進制表示形式都是

    2024年02月03日
    瀏覽(93)
  • 【FPGA】Verilog:二進制并行加法器 | 超前進位 | 實現(xiàn) 4 位二進制并行加法器和減法器 | MSI/LSI 運算電路

    【FPGA】Verilog:二進制并行加法器 | 超前進位 | 實現(xiàn) 4 位二進制并行加法器和減法器 | MSI/LSI 運算電路

    0x00 并行加法器和減法器 如果我們要對 4 位加法器和減法器進行關(guān)于二進制并行運算功能,可以通過將加法器和減法器以 N 個并行連接的方式,創(chuàng)建一個執(zhí)行 N 位加法和減法運算的電路。 4 位二進制并行加法器 4 位二進制并行減法器

    2024年02月05日
    瀏覽(23)
  • 碼出高效_第一章 | 有意思的二進制表示及運算

    碼出高效_第一章 | 有意思的二進制表示及運算

    設(shè)想有8條電路,每條電路有高電平和低電平兩種狀態(tài),即就有2 8 =256種不同的信號。假設(shè)其表示區(qū)間為0~255,最大數(shù)即2 8 -1。 那么32條電路能夠表示最大數(shù)為(2 32 -1)=4294967295,即所謂的32位電路信號。 正負數(shù)表示: 上面的8條電路,最左側(cè)一條表示正負:0-整數(shù),1-負數(shù),不

    2024年02月06日
    瀏覽(19)
  • 【Golang】二進制字符串轉(zhuǎn)換為數(shù)字

    【Golang】二進制字符串轉(zhuǎn)換為數(shù)字

    ?在本文中,我們將探討如何使用 Go 語言將十六進制字符串轉(zhuǎn)換為二進制字符串,將不定長整型補碼字符串轉(zhuǎn)換為數(shù)字,以及如何將 IEEE754 標(biāo)準(zhǔn)的單精度(32位)和雙精度(64位)浮點數(shù)字符串轉(zhuǎn)換為數(shù)字。最后,我們將討論如何將布爾類型的二進制字符串轉(zhuǎn)換為布爾值。 這

    2024年01月16日
    瀏覽(27)
  • 關(guān)于二進制的原碼、補碼和反碼,以及表示范圍、常見位運算符和進制轉(zhuǎn)換的理解與簡述

    關(guān)于二進制的原碼、補碼和反碼,以及表示范圍、常見位運算符和進制轉(zhuǎn)換的理解與簡述

    【版權(quán)聲明】未經(jīng)博主同意,謝絕轉(zhuǎn)載!(請尊重原創(chuàng),博主保留追究權(quán)) https://www.cnblogs.com/cnb-yuchen/p/17963363 出自【進步*于辰的博客】 參考筆記一,P3.13、P5.1;筆記三,P43.1/3、P44.1。 注:我暫且沒有整理關(guān)于二進制、原碼、補碼和反碼等概念的理論,本文中的闡述都基于

    2024年02月02日
    瀏覽(26)
  • 劍指 Offer 15. 二進制中1的個數(shù) / LeetCode 191. 位1的個數(shù)(位運算)

    劍指 Offer 15. 二進制中1的個數(shù) / LeetCode 191. 位1的個數(shù)(位運算)

    鏈接:劍指 Offer 15. 二進制中1的個數(shù);LeetCode 191. 位1的個數(shù) 難度:簡單 編寫一個函數(shù),輸入是一個無符號整數(shù)(以二進制串的形式),返回其二進制表達式中數(shù)字位數(shù)為 ‘1’ 的個數(shù)(也被稱為漢明重量)。 提示: 請注意,在某些語言(如 Java)中,沒有無符號整數(shù)類型。

    2024年02月12日
    瀏覽(79)
  • 【調(diào)制BFSK】二進制頻移鍵控FSK的數(shù)字調(diào)制(Matlab代碼實現(xiàn))

    【調(diào)制BFSK】二進制頻移鍵控FSK的數(shù)字調(diào)制(Matlab代碼實現(xiàn))

    ? ???????? 歡迎來到本博客 ???????? ??博主優(yōu)勢: ?????? 博客內(nèi)容盡量做到思維縝密,邏輯清晰,為了方便讀者。 ?? 座右銘: 行百里者,半于九十。 ?????? 本文目錄如下: ?????? 目錄 ??1 概述 ??2 運行結(jié)果 ??3?參考文獻 ??4 Matlab代碼實現(xiàn) 相移鍵

    2024年02月08日
    瀏覽(19)
  • 【十進制 轉(zhuǎn) 二進制】【二進制 轉(zhuǎn) 十進制】10進制 VS 2進制【清華大學(xué)考研機試題】

    【十進制 轉(zhuǎn) 二進制】【二進制 轉(zhuǎn) 十進制】10進制 VS 2進制【清華大學(xué)考研機試題】

    原題鏈接 本題我們先需要知道 十進制 如何轉(zhuǎn) 二進制 二進制 如何轉(zhuǎn) 十進制 十進制 如何轉(zhuǎn) 二進制: 十進制轉(zhuǎn)成二進制 例如 173 轉(zhuǎn)成 二進制 就把173 短除法 除到0 然后 得到的余數(shù), 從下往上寫 二進制 轉(zhuǎn)成 十進制 利用如圖方法,把二進制 轉(zhuǎn)成 十進制 本題是高精度,如何

    2023年04月26日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包