zoukankan      html  css  js  c++  java
  • 868. 二进制间距

    给定一个正整数 N,找到并返回 N 的二进制表示中两个连续的 1 之间的最长距离。
    如果没有两个连续的 1,返回 0 。
     
     

    示例 1:
    输入:22
    输出:2
    解释:
    22 的二进制是 0b10110 。
    在 22 的二进制表示中,有三个 1,组成两对连续的 1 。
    第一对连续的 1 中,两个 1 之间的距离为 2 。
    第二对连续的 1 中,两个 1 之间的距离为 1 。
    答案取两个距离之中最大的,也就是 2 。

    示例 2:
    输入:5
    输出:2
    解释:
    5 的二进制是 0b101 。

    示例 3:
    输入:6
    输出:1
    解释:
    6 的二进制是 0b110 。

    示例 4:
    输入:8
    输出:0
    解释:
    8 的二进制是 0b1000 。
    在 8 的二进制表示中没有连续的 1,所以返回 0 。

     
    提示:

     1 <= N <= 10^9
     
    思路:一遍遍历,用一个 max 表示遍历过程中的最大距离,运用位运算从右向左检查低位,如果 (N & 1) != 0 就说明低位是1,则更新distance距离为0,把当前作为第一个一,同时更新当前max,话不多说 看代码。
     1 int binaryGap(int N) 
     2 {
     3     int distance = 0, max = 0, distanceon = 0;
     4 
     5     while(N > 0)
     6     {
     7         if((N & 1) != 0) //如果碰到1就更新distance的值 碰到0就直接加一
     8         {
     9             distanceon = 1;
    10             if(distance > max)
    11             {
    12                 max = distance;
    13             }
    14             distance = 0;
    15         }
    16         distance += distanceon;
    17         N = N >> 1; 
    18     }
    19     return max;
    20 }

    按位与运算符 ‘&’,是对比二进制数的每一位数,如果是1则结果为1,否则都为0;

    例如:00011011

               00001001

    结果:00001001 

     
  • 相关阅读:
    验证码识别思路
    chrome插件 图片搜索(20130602更新版本v2.0)
    CoffeeScript实现BF解释器
    浏览器几种高度宽度
    javascript Event事件
    浮躁的心
    前端页面跨域访问
    firefox浏览器兼容event事件方法
    转:Java Annotation详解
    javascript void(0)问题【转】
  • 原文地址:https://www.cnblogs.com/ZhengLijie/p/12850371.html
Copyright © 2011-2022 走看看