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 }
  • 相关阅读:
    新学期,新起点
    判断整数的正负零特性
    C# 静态类与非静态类、静态成员的区别
    适配器模式:类适配器和对象适配器
    设计模式学习笔记
    C# 全局变量的实现
    设计模式
    Tuples in .Net 4 (System.Tuple)
    EnableViewState
    HashMap 、HashTable、HashSet的区别
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/5104285.html
Copyright © 2011-2022 走看看