成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

額,又是一道裝逼解法的算法題

Zack / 2863人閱讀

摘要:題目難度為,目前通過(guò)率為。這個(gè)特殊的數(shù)有如下特點(diǎn)足夠大,但不能超過(guò)位,即最大為個(gè)它的二進(jìn)制表示中奇數(shù)位為,偶數(shù)位為符合這兩個(gè)條件的二進(jìn)制數(shù)是如果用一個(gè)的冪次方數(shù)和它做與運(yùn)算,得到的還是的冪次方數(shù)。將這個(gè)二進(jìn)制數(shù)轉(zhuǎn)換成進(jìn)制表示。

題目來(lái)源于 LeetCode 上第 342 號(hào)問(wèn)題:4 的冪。題目難度為 Easy,目前通過(guò)率為 45.3% 。

題目描述

給定一個(gè)整數(shù) (32 位有符號(hào)整數(shù)),請(qǐng)編寫(xiě)一個(gè)函數(shù)來(lái)判斷它是否是 4 的冪次方。

示例 1:

輸入: 16
輸出: true

示例 2:

輸入: 5
輸出: false

進(jìn)階:
你能不使用循環(huán)或者遞歸來(lái)完成本題嗎?

題目解析

這道題最直接的方法就是不停的去除以 4 ,看最終結(jié)果是否為 1 ,參見(jiàn)代碼如下:

class Solution {
    public boolean isPowerOfFour(int num) {
         while ( (num != 0)  && (num % 4 == 0)) {
            num /= 4;
        }
        return num == 1;
    }
}

不過(guò)這段代碼使用了 循環(huán) ,逼格不夠高。

對(duì)于一個(gè)整數(shù)而言,如果這個(gè)數(shù)是 4 的冪次方,那它必定也是 2 的冪次方。

我們先將 2 的冪次方列出來(lái)找一下其中哪些數(shù)是 4 的冪次方。

十進(jìn)制 二進(jìn)制
2 10
4 100 (1 在第 3 位)
8 1000
16 10000(1 在第 5 位)
32 100000
64 1000000(1 在第 7 位)
128 10000000
256 100000000(1 在第 9 位)
512 1000000000
1024 10000000000(1 在第 11 位)

找一下規(guī)律: 4 的冪次方的數(shù)的二進(jìn)制表示 1 的位置都是在奇數(shù)位。

之前在小吳的文章中判斷一個(gè)是是否是 2 的冪次方數(shù)使用的是位運(yùn)算 n & ( n - 1 )。同樣的,這里依舊可以使用位運(yùn)算:將這個(gè)數(shù)與特殊的數(shù)做位運(yùn)算。

這個(gè)特殊的數(shù)有如下特點(diǎn):

足夠大,但不能超過(guò) 32 位,即最大為 1111111111111111111111111111111( 31 個(gè) 1)

它的二進(jìn)制表示中奇數(shù)位為 1 ,偶數(shù)位為 0

符合這兩個(gè)條件的二進(jìn)制數(shù)是:

1010101010101010101010101010101

如果用一個(gè) 4 的冪次方數(shù)和它做與運(yùn)算,得到的還是 4 的冪次方數(shù)。

將這個(gè)二進(jìn)制數(shù)轉(zhuǎn)換成 16 進(jìn)制表示:0x55555555 。有沒(méi)有感覺(jué)逼格更高點(diǎn)。。。

圖片描述

代碼實(shí)現(xiàn)
class Solution {
    public boolean isPowerOfFour(int num) {
        if (num <= 0)
            return false;
        //先判斷是否是 2 的冪
        if ((num & num - 1) != 0)
            return false;
        //如果與運(yùn)算之后是本身則是 4 的冪
        if ((num & 0x55555555) == num)
            return true;
        return false;
    }
}
?? 看完三件事:

如果你覺(jué)得這篇內(nèi)容對(duì)你挺有啟發(fā),我想邀請(qǐng)你幫我三個(gè)忙:

點(diǎn)贊,讓更多的人也能看到這篇內(nèi)容(收藏不點(diǎn)贊,都是耍流氓 -_-)

關(guān)注我和專欄,讓我們成為長(zhǎng)期關(guān)系

關(guān)注公眾號(hào)「五分鐘學(xué)算法」,第一時(shí)間閱讀最新的算法文章,公眾號(hào)后臺(tái)回復(fù) 1024 送你 50 本 算法編程書(shū)籍。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/76248.html

相關(guān)文章

  • 算法技巧】位運(yùn)算裝逼指南

    摘要:位算法的效率有多快我就不說(shuō),不信你可以去用億個(gè)數(shù)據(jù)模擬一下,今天給大家講一講位運(yùn)算的一些經(jīng)典例子。不過(guò),最重要的不是看懂了這些例子就好,而是要在以后多去運(yùn)用位運(yùn)算這些技巧,當(dāng)然,采用位運(yùn)算,也是可以裝逼的,不信,你往下看。位算法的效率有多快我就不說(shuō),不信你可以去用 10 億個(gè)數(shù)據(jù)模擬一下,今天給大家講一講位運(yùn)算的一些經(jīng)典例子。不過(guò),最重要的不是看懂了這些例子就好,而是要在以后多去運(yùn)用位運(yùn)算這...

    _ang 評(píng)論0 收藏0
  • 一道有意思面試算法

    摘要:解決方案異或操作異或運(yùn)算是對(duì)于二進(jìn)制數(shù)字而言的,比如說(shuō)一個(gè)有兩個(gè)二進(jìn)制,如果兩個(gè)值不相同,則異或結(jié)果為。比如說(shuō),本質(zhì)上其實(shí)是和的每一對(duì)比特位執(zhí)行異或操作,等價(jià)于下面數(shù)字對(duì)應(yīng)的二進(jìn)制數(shù)字對(duì)應(yīng)的二進(jìn)制數(shù)字對(duì)應(yīng)的二進(jìn)制因此的結(jié)果就為啦。 新年第一篇文章,先祝大家新年快樂(lè)!!那么接下來(lái)進(jìn)入正文。 前言 前陣子突發(fā)奇想,突然開(kāi)始刷leetcode。其中刷到了一道有意思的題目,發(fā)現(xiàn)這道題是當(dāng)時(shí)秋招...

    maxmin 評(píng)論0 收藏0
  • 一道多線程面試引起自我救贖

    摘要:重溫一個(gè)面試題內(nèi)容數(shù)組內(nèi)容為數(shù)組內(nèi)容為個(gè)英文字母,使用兩個(gè)線程分別輸入兩個(gè)數(shù)組,打印內(nèi)容為這樣的規(guī)律提取一下核心內(nèi)容,去除次要內(nèi)容兩個(gè)線程需要交替執(zhí)行,打印數(shù)字的線程需要先執(zhí)行,數(shù)組打印完畢后線程需要結(jié)束。 一道多線程面試題引起的自我救贖 近日去一個(gè)知名互聯(lián)網(wǎng)企業(yè)參加面試,之前準(zhǔn)備多多信心滿滿,但是面試一開(kāi)始就是一道不起眼的編程題 數(shù)組A內(nèi)容為 1,2,3,4...52 ,數(shù)組B內(nèi)容...

    BaronZhang 評(píng)論0 收藏0
  • [Java] 關(guān)于一道面試思考

    摘要:對(duì)于這種會(huì)退出的情況,數(shù)組顯然不能像鏈表一樣直接斷開(kāi),因此采用標(biāo)記法先生成一個(gè)長(zhǎng)度為的布爾型數(shù)組,用填充。中對(duì)整個(gè)進(jìn)行遍歷才能得到此時(shí)數(shù)組中的數(shù)量。 文中的速度測(cè)試部分,時(shí)間是通過(guò)簡(jiǎn)單的 System.currentTimeMillis() 計(jì)算得到的, 又由于 Java 的特性,每次測(cè)試的結(jié)果都不一定相同, 對(duì)于低數(shù)量級(jí)的情況有 ± 20 的浮動(dòng),對(duì)于高數(shù)量級(jí)的情況有的能有 ± 10...

    rozbo 評(píng)論0 收藏0
  • 深入理解js

    摘要:詳解十大常用設(shè)計(jì)模式力薦深度好文深入理解大設(shè)計(jì)模式收集各種疑難雜癥的問(wèn)題集錦關(guān)于,工作和學(xué)習(xí)過(guò)程中遇到過(guò)許多問(wèn)題,也解答過(guò)許多別人的問(wèn)題。介紹了的內(nèi)存管理。 延遲加載 (Lazyload) 三種實(shí)現(xiàn)方式 延遲加載也稱為惰性加載,即在長(zhǎng)網(wǎng)頁(yè)中延遲加載圖像。用戶滾動(dòng)到它們之前,視口外的圖像不會(huì)加載。本文詳細(xì)介紹了三種延遲加載的實(shí)現(xiàn)方式。 詳解 Javascript十大常用設(shè)計(jì)模式 力薦~ ...

    caikeal 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<