1. 程式人生 > 實用技巧 >面試題 05.03. 翻轉數位

面試題 05.03. 翻轉數位

面試題 05.03. 翻轉數位

給定一個32位整數 num,你可以將一個數位從0變為1。請編寫一個程式,找出你能夠獲得的最長的一串1的長度。

示例 1:

輸入: num = 1775(110111011112)
輸出: 8
示例 2:

輸入: num = 7(01112)
輸出: 4

分析:

維護兩個變數,一個用來維護當前最大長度,一個用來維護上一次由0翻轉1後的連續1的個數,每一次遇到零時,都將當前的最大長度減去上次的連續個數,並且記錄此時1的個數。

程式碼:

class Solution {
    public:
     int reverseBits(int num) {
        int curNum = 0
, preNum = 0, maxNum = 0; for(int i = 0; i < 32; ++i){ if((num & 1) == 1){ curNum++; }else{ curNum -= preNum; curNum++; preNum = curNum; } maxNum = max(maxNum, curNum); num
>>= 1; } return maxNum; } };