zoukankan      html  css  js  c++  java
  • Leetcode: 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.

    Analysis: O(N) solution will cause TLE, so this is a math problem and should generate O(1) solution

    First trial: slow.

    Check all 32 bits. see if both m(lower bound) and n(higher bound) are 1 on ith bit. Also need to check if diff=n-m+1 is greater than 2^i, which is the max range that 1 is fixed on this bit.

     1 public class Solution {
     2     public int rangeBitwiseAnd(int m, int n) {
     3         int res = 0;
     4         int diff = n-m+1;
     5         int maxRange = 1;
     6         for (int i=0; i<=31; i++) {
     7             maxRange = (int)Math.pow(2, i);
     8             if (diff > maxRange) continue;
     9             int mi = (m>>i) & 1;
    10             int ni = (n>>i) & 1;
    11             if (mi == 1 && ni == 1) res |= 1<<i; 
    12         }
    13         return res;
    14     }
    15 }

    Better solution: this is actually finding the Shared Header(公共头部)

     1 public class Solution {
     2     public int rangeBitwiseAnd(int m, int n) {
     3         if (m > n) return 0;
     4         int i = 0;
     5         while (m != n && m != 0) {
     6             m = m >> 1;
     7             n = n >> 1;
     8             i++;
     9         }
    10         return m<<i;
    11     }
    12 }
  • 相关阅读:
    元素显示v-show
    条件渲染v-if
    v-bind:class
    Class绑定v-bind:class
    设定计算属性setter
    观察属性$watch
    计算属性computed
    过滤器filters
    jk_proxy实现apache+tomcat负载均衡
    (WPF)Storyboard
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/5047008.html
Copyright © 2011-2022 走看看