【Leetcode】Bitwise AND of Numbers Range
2016-05-21 22:15
399 查看
题目链接:https://leetcode.com/problems/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.
思路:
32位整型,只需判断每一位在m~n之间是否有0存在,若有,该位 在AND操作中一定为0,只需判断32次
算法:
[java] view
plain copy
public int rangeBitwiseAnd(int m, int n) {
if (m == n)
return m;
int res = 0, i = 0;
while (n != 0 && m != 0) {
// 检查m~n是否有偶数存在时间复杂度O(1)
boolean flag = false;
for (int j = m; j <= n; j++) {
int tmp = j;
if ((tmp & 1) == 0) {// 最后一位为0
flag = true;
break;
}
}
if (flag == false) {// 最低位全是1
res = res | (1 << i); // 将指定为置为1
}
i++;
n = n >> 1;
m = m >> 1;
}
return res;
}
题目:
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.
思路:
32位整型,只需判断每一位在m~n之间是否有0存在,若有,该位 在AND操作中一定为0,只需判断32次
算法:
[java] view
plain copy
public int rangeBitwiseAnd(int m, int n) {
if (m == n)
return m;
int res = 0, i = 0;
while (n != 0 && m != 0) {
// 检查m~n是否有偶数存在时间复杂度O(1)
boolean flag = false;
for (int j = m; j <= n; j++) {
int tmp = j;
if ((tmp & 1) == 0) {// 最后一位为0
flag = true;
break;
}
}
if (flag == false) {// 最低位全是1
res = res | (1 << i); // 将指定为置为1
}
i++;
n = n >> 1;
m = m >> 1;
}
return res;
}
相关文章推荐
- 第四章 深入JSP技术
- hdu 5690 多种方法实现
- ubuntu下NTFS分区无法访问的问题
- tomcat端口占用问题
- 【Java基础】键盘录入Scanner类中的next()与nextLine()的问题
- CodeForces 246A. Buggy Sorting【思维】
- c++实验6-数组合并
- MVC过滤器详解
- microstation level2 0613
- Ubuntu下安装Pycharm
- Cocos2dx游戏引擎(3.x)----新的事件分发机制
- 自己编写LabVIEW中调用的DLL
- c++之继承1
- 编码规范-文件管理
- Hibernate连接MySQL时发生Error SSL connector
- 数据结构栈的操作
- java编解码技术,netty nio
- 在一个高并发系统中 如果突然出现一个应用或者说一个服务突然变得很慢,应该怎么排查?
- 【步兵 c++】教科书般的A*寻路算法
- C++实验6—矩阵求和