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 }
  • 相关阅读:
    UIView的clipsToBounds属性,layoutSubViews及触摸事件传递(默认情况下)总结
    ISO中运行时简单使用及KVC补充
    IOS中UISearchBar的使用
    oc的block
    oc的协议(protocol)
    oc的分类category
    oc内存的理解
    oc笔记(转载)
    oc对象中属性总结
    servlet,struts1,struts2,spring
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/5104285.html
Copyright © 2011-2022 走看看