1.题目
给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。
示例 1:
输入: num = 1775(110111011112)
输出: 8
示例 2:
输入: num = 7(01112)
输出: 4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-bits-lcci/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2.题解
pre记录翻转前的最长位数,now记录当前长度,max记录最大长度,每次翻转减去上次翻转时的长度,记为这次翻转的长度。
class Solution
{
public:
int reverseBits(int num)
{
int n = 32,Max = 0, now = 0, pre = 0;
while(n--)
{
if((num & 1 ) == 0)
{
now -= pre;
pre = now + 1;
}
now++;
Max = max(now,Max);
num >>= 1;
}
return Max;
}
};