zoukankan      html  css  js  c++  java
  • Lintcode: Update Bits

    Given two 32-bit numbers, N and M, and two bit positions, i and j. Write a method to set all bits between i and j in N equal to M (e g , M becomes a substring of N located at i and starting at j)
    
    Have you met this question in a real interview? Yes
    Example
    Given N=(10000000000)2, M=(10101)2, i=2, j=6
    
    return N=(10001010100)2
    
    Note
    In the function, the numbers N and M will given in decimal, you should also return a decimal number.
    
    Challenge
    Minimum number of operations?
    
    Clarification
    You can assume that the bits j through i have enough space to fit all of M. That is, if M=10011, you can assume that there are at least 5 bits between j and i. You would not, for example, have j=3 and i=2, because M could not fully fit between bit 3 and bit 2.

    以题中例子为例,做一个滤波器在i,j之间:11110000011,来跟N按位与,再把M左移i位,按位或

     1 class Solution {
     2     /**
     3      *@param n, m: Two integer
     4      *@param i, j: Two bit positions
     5      *return: An integer
     6      */
     7     public int updateBits(int n, int m, int i, int j) {
     8         // write your code here
     9         int len = j-i+1;
    10         int temp = 0;
    11         for (int x=0; x<len; x++) {
    12             temp |= 1<<x;
    13         }
    14         temp = ~(temp<<i);
    15         return (n&temp) | (m<<i);
    16     }
    17 }
  • 相关阅读:
    java-oop集合map
    IDEA启动Tomcat报错
    1.IDEM的快捷键
    1.idea快捷键
    14.
    13.级联一对多
    12.动态SQL
    11.动态参数
    10.主键回填
    9.参数的传递
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/5104285.html
Copyright © 2011-2022 走看看