zoukankan      html  css  js  c++  java
  • 面试题 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

  • 相关阅读:
    hud 1397
    hdu 1211
    hdu 1124
    hdu 1104
    1788
    hdu 1796
    sdut 2169
    hdu 1019
    $http post 取不到数据
    sql
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/13555280.html
Copyright © 2011-2022 走看看