Single Number II ——位操作
题意:
给定两个32位的整数 N 和 M,以及表示比特位置的 i 与 j 。编写一个方法,将 M 插入 N,使得 M 从 N 的第 j 位开始,到第 i 位结束。假定从 j 位到 i 位足以容纳M。
输入:N = 10000101000,M = 10011,i = 2, j = 6
输出:N = 10001001100
解题思路 :
根据题意,我们将问题解决分为三个步骤:
(1)将 N 中从 j 到 i 之间的位清零;
(2)对 M 进行移位操作,M << i
(3)合并 M 与 N 。
为了完成步骤1,我们可以使用掩码来清零,除j到i之间的位为0外,这个掩码其余位为1。例如本题中,i = 2,j = 6,则掩码为11110000011。
具体代码如下:
public int updateBits(int n,int m,int i,int j) {
/*
*创建掩码,用来除 n中 i到 j的位
*本题中,i = 2,j = 6,则掩码为11110000011
*/
int allOnes = ~; //一连串的 1
//在位置 j 之前的位均为1,其余为0,则 left = 11110000000
int left = allOnes << (j + );
//在位置 i 之后的位均为1,其余为0,则right = 00000000011
int right = (( << i) - );
//除 i 到 j的位为 0,其余为1 则mask = 11110000011
int mask = left | right;
int n_cleared = n & mask; //清楚n中j到i的位
int m_shifted = m << i; //将M移至相应的位置
return n_cleared | m_shifted; //对两者进行位或操作
}
Single Number II ——位操作的更多相关文章
- 【题解】【位操作】【Leetcode】Single Number II
Given an array of integers, every element appears three times except for one. Find that single one. ...
- Leetcode 137 Single Number II 仅出现一次的数字
原题地址https://leetcode.com/problems/single-number-ii/ 题目描述Given an array of integers, every element ap ...
- 【LeetCode】137. Single Number II (3 solutions)
Single Number II Given an array of integers, every element appears threetimes except for one. Find t ...
- Single Number II(LintCode)
Single Number II Given 3*n + 1 numbers, every numbers occurs triple times except one, find it. Examp ...
- 【leetcode】Single Number && Single Number II(ORZ 位运算)
题目描述: Single Number Given an array of integers, every element appears twice except for one. Find tha ...
- [OJ] Single Number II
LintCode 83. Single Number II (Medium) LeetCode 137. Single Number II (Medium) 以下算法的复杂度都是: 时间复杂度: O( ...
- Single Number,Single Number II
Single Number Total Accepted: 103745 Total Submissions: 218647 Difficulty: Medium Given an array of ...
- leetcode 之 Single Number II
问题来源:Single Number II 问题描述:给定一个整数数组,除了一个整数出现一次之外,其余的每一个整数均出现三次,请找出这个出现一次的整数. 大家可能很熟悉另一个题目(Single Num ...
- 【leetcode78】Single Number II
题目描述: 给定一个数组,里面除了一个数字,其他的都出现三次.求出这个数字 原文描述: Given an array of integers, every element appears three ...
随机推荐
- visio画UML用例图没有include关系的解决方法
今天用Microsoft Visio画用例图时,发现visio UML用例里面找不到include关系,即“箭头”+“<>” 这个组件,后来终于发现一个可行的解决办法: 首先:打开Micr ...
- 一个QMLListView的例子--
一般人不知道怎么去过滤ListView里面的数据,下面是一个转载的文章:http://imaginativethinking.ca/use-qt-quicks-delegatemodelgroup/ ...
- sql 如何过滤重复记录
distinct : select distinct ID from table1
- UVa 11426 - GCD - Extreme (II)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- bitmap格式分析
位图(Bitmap)当然是最简单的,它Windows显示图片的基本格式,其文件扩展名为*.BMP.在Windows下,任何各式的图片文件(包括视频播放)都要转化为位图个时候才能显示出来,各种格式的图片 ...
- 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别
本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beg ...
- as3资源加载-Loader和URLLoader
⊙ Loader:只能加载SWF和图像.⊙ URLLoader:除了能加载swf和图像,还可以加载二进制文件(txt , xml , swc , ........). ================ ...
- Activity(活动)-再讲
通过多天的学习,大家也了解了adb.exe 是用来进行 客户端(pc)-服务器端(android) 数据交互的. 用户可以使用工具Eclipse 中DDMS 隐示使用 adb.exe 进行连接,也可 ...
- lightoj1082 线段树
//Accepted 5596 KB 396 ms //线段树求区间最小值 #include <cstdio> #include <cstring> #include < ...
- ALAssets的两种用法
一: ALAssetsGroupEnumerationResultsBlock resultsBlock = ^(ALAsset *result, NSUInteger index, BOOL *st ...