• Bitwise AND of Numbers Range


    Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive.

    For example, given the range [5, 7], you should return 4.

    分析:第一种都容易想到,将所有数字进行AND操作,肯定超时的啦

    1 class Solution {
    2 public:
    3     int rangeBitwiseAnd(int m, int n) {
    4         int result = 1;
    5         for(int i = m; i <= n; i++) result = result & i;
    6         return result;
    7     }
    8 };
    View Code

    由于是连续整数进行AND,那么只要有一个位上的数字为0,那么该位的结果就为0. 

    如果n位数>m位数,一定会出现100…0的情况,AND的结果为100…00

    如果n位数=m位数,从最高位开始分析,如果n和m该位上的数字相等,考虑下一位,直到某位上n=1,m=0(因为n>m)。到这种情况时,一定又会出现100…0的情况,所以后面的这些数字进行AND操作所得结果为0.

    所以,不断将m和n进行右移位操作,并用计数器计数,直到m=n。

    运行时间229ms。想想该怎么优化吧。。

     1 class Solution {
     2 public:
     3     int rangeBitwiseAnd(int m, int n) {
     4         int times = 0;
     5         while(m != n){
     6             m = m >> 1;
     7             n = n >> 1;
     8             times++;
     9         }
    10         return m<<times;
    11     }
    12 };
  • 相关阅读:
    重力感应GSensor 方向介绍
    php图片保存、下载
    AJAX技术在PHP开发中的简单应用
    php 面向对象基础
    用PHP处理多个同名复选框
    去掉codeigniter地址中的index.php
    PHP中如何运用ini_set和ini_get()
    Windows 7下PHP配置环境
    zend_application 说明
    PHP写的域名查询系统whois
  • 原文地址:https://www.cnblogs.com/amazingzoe/p/4489862.html
Copyright © 2020-2023  润新知