利用位运算过滤重复
来源:互联网 发布:网页编程自学 编辑:程序博客网 时间:2024/04/29 17:10
以前看到一个题目,大致要求如下:
//在一堆20以内数字找出重复的,不开辟空间,时间复杂度在O(n)以内//1,2,3,4,5,5,6,6,7,8,9,10,11,12,13,14,15,16,17,18,19,18,15,16,1
这个题目如果可以开辟空间是很好处理的,但是明确要求了不能开辟空间,因此需要再看看其他思路。
通过数字特点,我们可以分析如下:数字是在20以内。根据我们队内存的了解,一个int是32位,那么是不是我们可以通过位运算来实现排重呢?
好吧,废话少说,直接上代码。
int []origins = {1,2,3,4,5,5,6,6,7,8,9,10,11,12,13,14,15,16,17,18,19,18,15,16,15};for (int i : origins) {if ((origins[0] & ((i >> 5) | (1<<i))) != 0) {System.out.println(i);} else {origins[0] |= ((i >> 5) | (1<<i));}}
0 0
- 利用位运算过滤重复
- 利用HashSet过滤重复数据
- 利用位运算判断数组中是否有重复的数字
- 利用位运算做加法
- 利用位运算设置标志位
- 利用位运算实现加法运算
- 位运算总结2:利用位运算实现加法
- 利用位运算实现四则运算-华为面试
- 利用位运算实现加密解密
- 利用位运算枚举所有子集
- 利用位运算判断整数的正负
- 利用位运算进行权限管理
- 利用位运算的模四算法
- 利用位运算实现两个整数相加
- 利用位运算进行权限管理
- 利用位运算进行循环移位操作
- 利用位与运算简化代码
- ACM 利用位运算枚举所有子集
- 简单的运算符重载
- 开源C++网络库
- IOS状态栏和导航栏的控制问题
- java 反射
- 关于RasASM的一个编译错误
- 利用位运算过滤重复
- 内存泄漏和内存溢出的区别
- *** FATAL ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED
- 最基础的函数模板的的应用
- jstl中,c:set 设置的值在jsp:include 的页面失效
- 关于viewpager翻页时的小问题
- 大数据侧重路线
- nodejs初级学习(一)--简介及开发环境配置
- PHP日期时间函数之microtime()