
位运算
stevewongbuaa
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
二进制中有多少个1
问题描述计算在一个 32 位的整数的二进制表式中有多少个 1.样例 给定 32 (100000),返回 1给定 5 (101),返回 2给定 1023 (111111111),返回 9笔记利用特性 num & (num - 1) 可以去掉二进制中最低位的1。代码1,笨方法class Solution { public: /** * @param num: an integer原创 2016-08-04 22:16:10 · 292 阅读 · 0 评论 -
落单的数
问题描述http://www.lintcode.com/zh-cn/problem/single-number/给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。样例 给出 [1,2,2,1,3,4,3],返回 4笔记利用位运算特性,异或的特性,相同的数异或为0,任何数与0异或为自己。代码class Solution { public: /**原创 2016-08-04 22:25:48 · 193 阅读 · 0 评论 -
位运算的小技巧s
位运算小技巧总结异或a^a = 0 a^0 = a a^b != 0(a与b的不同的位异或之后为1,可以用来将a和b分两组)num&(num-1)去掉num最低位的1,如1010&1001=1000num&(~(num-1))只剩下最低位的1,如1010&0110=0010将a的第i位置1其中i&0x1F是要保证左移的位数小于32void set(int& a,int i) { a |= (1<原创 2016-08-04 23:19:25 · 410 阅读 · 0 评论 -
落单的数II
问题描述http://www.lintcode.com/zh-cn/problem/single-number-ii/给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字。样例 给出 [1,1,2,3,3,3,2,2,4,1] ,返回 4笔记代码1利用字典,存下来不同数字出现的次数,最后把次数1次的返回。时间复杂度O(n),空间复杂度O(n)。代码2排序,然后再找只原创 2016-08-04 23:11:14 · 589 阅读 · 0 评论 -
落单的数 III
问题描述http://www.lintcode.com/zh-cn/problem/single-number-iii/给出2*n + 2个的数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字。样例 给出 [1,2,2,3,4,4,5,3],返回 1和5笔记先把数据全都异或一个遍,出现两次的数全都被抵消了。剩下不同的两个数a和b的异或。因为a与b不同,a^b肯定不为0。找出a^b的最低原创 2016-08-05 10:37:08 · 370 阅读 · 0 评论 -
异或之美
异或可以解决很多奇特的算法问题。请时刻记住异或!参考在乱序数组中寻找特定出现次数的数字——异或运算实验代码// // main.cpp // xor // // Created by SteveWong on 8/4/16. // Copyright © 2016 SteveWong. All rights reserved. //#include <iostream> #include <原创 2016-08-04 16:56:46 · 412 阅读 · 0 评论 -
回文数判断
问题描述给一个int,判断是不是回文数。测试用例123321 就是笔记用到一个比较巧的思路,设置一个tmp,截取x的后一半。一直循环到tmp > x了,如果这时候x与tmp相等(x的位数是偶数,如123321,则此时x=123,tmp=123),又或者x==tmp/10(x的位数是奇数,如121,则此时x=1,tmp=12),则可以说明是回文数。在这中间还要注意,x不能被10整除,这样的话原来的算法原创 2016-08-29 20:53:02 · 720 阅读 · 0 评论