面試題 05.03. 翻轉數位
阿新 • • 發佈:2020-08-24
面試題 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; } };