题目:

给定一个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 = Math.max(maxNum, curNum);
            num >>= 1;
        }
        return maxNum;
    }
}

 

相关文章:

  • 2021-08-18
  • 2021-09-21
  • 2021-07-06
  • 2021-11-06
  • 2022-01-29
  • 2021-11-14
  • 2021-10-18
  • 2022-01-25
猜你喜欢
  • 2021-09-17
  • 2021-11-04
  • 2022-01-29
  • 2021-05-23
  • 2021-10-21
  • 2021-12-12
  • 2021-12-31
相关资源
相似解决方案