面试题 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;
}
};
因上求缘,果上努力~~~~ 作者:图神经网络,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/13555280.html