亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++實現(xiàn)LeetCode(201.數(shù)字范圍位相與)

 更新時間:2021年08月06日 14:51:18   作者:Grandyang  
這篇文章主要介紹了C++實現(xiàn)LeetCode(201.數(shù)字范圍位相與),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下

[LeetCode] 201.Bitwise AND of Numbers Range 數(shù)字范圍位相與

Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive.

For example, given the range [5, 7], you should return 4.

Credits:
Special thanks to @amrsaqr for adding this problem and creating all test cases.

又是一道考察位操作Bit Operation的題,相似的題目在LeetCode中還真不少,比如Repeated DNA Sequences 求重復(fù)的DNA序列, Single Number 單獨的數(shù)字,   Single Number II 單獨的數(shù)字之二 , Grey Code 格雷碼,和 Reverse Bits 翻轉(zhuǎn)位 等等,那么這道題其實并不難,我們先從題目中給的例子來分析,[5, 7]里共有三個數(shù)字,分別寫出它們的二進制為:

101  110  111

相與后的結(jié)果為100,仔細觀察我們可以得出,最后的數(shù)是該數(shù)字范圍內(nèi)所有的數(shù)的左邊共同的部分,如果上面那個例子不太明顯,我們再來看一個范圍[26, 30],它們的二進制如下:

11010  11011  11100  11101  11110

發(fā)現(xiàn)了規(guī)律后,我們只要寫代碼找到左邊公共的部分即可,我們可以從建立一個32位都是1的mask,然后每次向左移一位,比較m和n是否相同,不同再繼續(xù)左移一位,直至相同,然后把m和mask相與就是最終結(jié)果,代碼如下:

解法一:

class Solution {
public:
    int rangeBitwiseAnd(int m, int n) {
        int d = INT_MAX;
        while ((m & d) != (n & d)) {
            d <<= 1;
        }
        return m & d;
    }
};

此題還有另一種解法,不需要用mask,直接平移m和n,每次向右移一位,直到m和n相等,記錄下所有平移的次數(shù)i,然后再把m左移i位即為最終結(jié)果,代碼如下:

解法二:

class Solution {
public:
    int rangeBitwiseAnd(int m, int n) {
        int i = 0;
        while (m != n) {
            m >>= 1;
            n >>= 1;
            ++i;
        }
        return (m << i);
    }
};

下面這種方法有點叼,就一行搞定了,通過遞歸來做的,如果n大于m,那么就對m和n分別除以2,并且調(diào)用遞歸函數(shù),對結(jié)果再乘以2,一定要乘回來,不然就不對了,就舉一個最簡單的例子,m = 10, n = 11,注意這里是二進制表示的,然后各自除以2,都變成了1,調(diào)用遞歸返回1,這時候要乘以2,才能變回10,參見代碼如下:

解法三:

class Solution {
public:
    int rangeBitwiseAnd(int m, int n) {
        return (n > m) ? (rangeBitwiseAnd(m / 2, n / 2) << 1) : m;
    }
};

下面這種方法也不錯,也很簡單,如果m小于n就進行循環(huán),n與上n-1,那么為什么要這樣與呢,舉個簡單的例子唄,110與上(110-1),得到100,這不就相當(dāng)于去掉最低位的1么,n就這樣每次去掉最低位的1,如果小于等于m了,返回此時的n即可,參見代碼如下:

解法四:

class Solution {
public:
    int rangeBitwiseAnd(int m, int n) {
        while (m < n) n &= (n - 1);
        return n;
    }
};

參考資料:

https://discuss.leetcode.com/topic/13508/one-line-c-solution

https://discuss.leetcode.com/topic/12133/bit-operation-solution-java

https://discuss.leetcode.com/topic/20176/2-line-solution-with-detailed-explanation

到此這篇關(guān)于C++實現(xiàn)LeetCode(201.數(shù)字范圍位相與)的文章就介紹到這了,更多相關(guān)C++實現(xiàn)數(shù)字范圍位相與內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何將編譯過的C++庫迅速部署在Visual?Studio新項目中

    如何將編譯過的C++庫迅速部署在Visual?Studio新項目中

    本文介紹在Visual?Studio中,通過屬性表,使得一個新建解決方案中的項目可以快速配置已有解決方案的項目中各類已編譯好的C++第三方庫的方法,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • C++編程中new運算符的使用學(xué)習(xí)教程

    C++編程中new運算符的使用學(xué)習(xí)教程

    這篇文章主要介紹了C++編程中new運算符的使用學(xué)習(xí)教程,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-01-01
  • C語言中的回調(diào)函數(shù)實例

    C語言中的回調(diào)函數(shù)實例

    如果函數(shù)A的指針作為函數(shù)B的參數(shù),在函數(shù)B中利用該指針調(diào)用函數(shù)A,則此時的A就是回調(diào)函數(shù)。
    2014-04-04
  • C語言中的鏈接編寫教程

    C語言中的鏈接編寫教程

    這篇文章主要介紹了C語言中的鏈接編寫教程,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • 基于C++11實現(xiàn)手寫線程池的示例代碼

    基于C++11實現(xiàn)手寫線程池的示例代碼

    在實際的項目中,使用線程池是非常廣泛的,本文主要介紹了基于C++11實現(xiàn)手寫線程池的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • 淺析string類字符串和C風(fēng)格字符串之間的區(qū)別

    淺析string類字符串和C風(fēng)格字符串之間的區(qū)別

    string類是標(biāo)準(zhǔn)庫的類,并不是內(nèi)置類型,標(biāo)準(zhǔn)庫就像是我們自己定義的類差不多的,string類型對象沒有標(biāo)配'\0'結(jié)尾的
    2013-09-09
  • 有關(guān)C++中隨機函數(shù)rand() 和srand() 的用法詳解

    有關(guān)C++中隨機函數(shù)rand() 和srand() 的用法詳解

    下面小編就為大家?guī)硪黄嘘P(guān)C++中隨機函數(shù)rand() 和srand() 的用法詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C語言循環(huán)控制入門介紹

    C語言循環(huán)控制入門介紹

    大家好,本篇文章主要講的是C語言循環(huán)控制入門介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C語言+EasyX實現(xiàn)數(shù)字雨效果

    C語言+EasyX實現(xiàn)數(shù)字雨效果

    這篇文章主要為大家詳細介紹了C語言+EasyX實現(xiàn)數(shù)字雨效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 淺析C和C++函數(shù)的相互引用

    淺析C和C++函數(shù)的相互引用

    C++是一種面向?qū)ο蟮某绦蛟O(shè)計語言,為了支持函數(shù)的重載,C++對全局函數(shù)的處理方式與C有明顯的不同
    2013-10-10

最新評論