最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年08月06日 14:51:18   作者:Grandyang  
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(201.數(shù)字范圍位相與),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(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 單獨(dú)的數(shù)字,   Single Number II 單獨(dú)的數(shù)字之二 , Grey Code 格雷碼,和 Reverse Bits 翻轉(zhuǎn)位 等等,那么這道題其實(shí)并不難,我們先從題目中給的例子來分析,[5, 7]里共有三個(gè)數(shù)字,分別寫出它們的二進(jìn)制為:

101  110  111

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

11010  11011  11100  11101  11110

發(fā)現(xiàn)了規(guī)律后,我們只要寫代碼找到左邊公共的部分即可,我們可以從建立一個(gè)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);
    }
};

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

解法三:

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

下面這種方法也不錯(cuò),也很簡單,如果m小于n就進(jìn)行循環(huán),n與上n-1,那么為什么要這樣與呢,舉個(gè)簡單的例子唄,110與上(110-1),得到100,這不就相當(dāng)于去掉最低位的1么,n就這樣每次去掉最低位的1,如果小于等于m了,返回此時(shí)的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++實(shí)現(xiàn)LeetCode(201.數(shù)字范圍位相與)的文章就介紹到這了,更多相關(guān)C++實(shí)現(xiàn)數(shù)字范圍位相與內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言詳細(xì)講解qsort函數(shù)的使用

    C語言詳細(xì)講解qsort函數(shù)的使用

    排序方法有很多種:選擇排序,冒泡排序,歸并排序,快速排序等??疵侄贾揽焖倥判蚴悄壳肮J(rèn)的一種比較好的排序算法。因?yàn)樗俣群芸?,所以系統(tǒng)也在庫里實(shí)現(xiàn)這個(gè)算法,便于我們的使用。這就是qsort函數(shù)
    2022-04-04
  • C++多線程中的鎖和條件變量使用教程

    C++多線程中的鎖和條件變量使用教程

    這篇文章主要介紹了C++多線程中的鎖和條件變量使用,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • C語言實(shí)現(xiàn)漢諾塔游戲

    C語言實(shí)現(xiàn)漢諾塔游戲

    個(gè)人覺得漢諾塔這個(gè)遞歸算法比電子老鼠的難了一些,不過一旦理解了也還是可以的,其實(shí)網(wǎng)上也有很多代碼,可以直接參考。記得大一開始時(shí)就做過漢諾塔的習(xí)題,但是那時(shí)代碼寫得很長很長,也是不理解遞歸的結(jié)果。今天重新來實(shí)現(xiàn)一下
    2015-03-03
  • C語言實(shí)現(xiàn)通訊錄功能的流程與代碼

    C語言實(shí)現(xiàn)通訊錄功能的流程與代碼

    通訊錄是一個(gè)可以記錄親人、好友信息的工具,這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)通訊錄管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語言撲克牌游戲示例

    C語言撲克牌游戲示例

    大家好,本篇文章主要講的是C語言撲克牌游戲示例,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • VC6.0打開文件以及向工程中添加文件時(shí)程序崩潰自動(dòng)退出解決方法

    VC6.0打開文件以及向工程中添加文件時(shí)程序崩潰自動(dòng)退出解決方法

    vc6.0程序中,點(diǎn)擊打開文件以及向工程中添加文件時(shí),程序竟然崩潰自動(dòng)退出了,不知什么原因,安裝相同的vc程序,本本竟然出現(xiàn)此緣故
    2013-01-01
  • C語言中如何獲取函數(shù)內(nèi)成員的值你知道嗎

    C語言中如何獲取函數(shù)內(nèi)成員的值你知道嗎

    這篇文章主要為大家詳細(xì)介紹了C語言中如何獲取函數(shù)內(nèi)成員的值的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C語言和C++的6點(diǎn)區(qū)別

    C語言和C++的6點(diǎn)區(qū)別

    在本篇文章里我們給大家整理了關(guān)于C語言和C++的6點(diǎn)區(qū)別,需要的朋友們可以學(xué)習(xí)參考下。
    2019-02-02
  • C++控制臺(tái)用定時(shí)器實(shí)例代碼

    C++控制臺(tái)用定時(shí)器實(shí)例代碼

    這篇文章主要介紹了C++控制臺(tái)用定時(shí)器實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • C++ 基類指針和子類指針相互賦值的實(shí)現(xiàn)方法

    C++ 基類指針和子類指針相互賦值的實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄狢++ 基類指針和子類指針相互賦值的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12

最新評論

九台市| 文水县| 恭城| 明水县| 平湖市| 吴桥县| 咸丰县| 江孜县| 霍山县| 凯里市| 宜昌市| 南川市| 通榆县| 南康市| 定安县| 沾益县| 岗巴县| 巴马| 牙克石市| 金寨县| 兖州市| 寿宁县| 靖江市| 泊头市| 中卫市| 泾源县| 防城港市| 永兴县| 泰来县| 视频| 时尚| 百色市| 河南省| 泗阳县| 桓仁| 墨脱县| 祁东县| 阿拉善左旗| 贵定县| 上蔡县| 峨边|