随笔分类 -  位操作

摘要:一:解题思路 方法一:之前做过一道求一个正整数二进制中1的个数的题目,利用这个题目为基础,然后遍历从1-n 这n+1 个数字。Time:O(n*k),Space:O(1) 方法二:利用动态规划的思想来做,递推公式为:d[i]=d[i&(i-1)]+1。Time:O(n),Space:O(1) 二:完 阅读全文
posted @ 2020-07-30 16:54 repinkply 阅读(228) 评论(0) 推荐(0)
摘要:一:解题思路 方法一:只要原始数字为2的倍数,不断的去除以2,直到最后结果为1.Time:O(log(n)),Space:O(1) 方法二:我们可以发现,当一个数中有且仅有某一位二进制为1的时候,那么这个数就肯定是2的幂。所以我们可以看n&(n-1)==0来判断这个数是否为2的幂。Time:O(1) 阅读全文
posted @ 2020-04-03 20:31 repinkply 阅读(593) 评论(0) 推荐(0)
摘要:一:解题思路 第一种方法:用一个数字1与原始数字进行按位&,如果不为0,计数器加1,然后数字1向左移动一位,继续检查原始数字的倒数第二位,直到数字1向左移动变为0。Time:O(m),m表示原始数字中二进制1的个数。Space:O(1) 第一种方法变体:判断(n&1) ==1 ? counts+=1 阅读全文
posted @ 2020-03-15 15:34 repinkply 阅读(366) 评论(0) 推荐(0)
摘要:一:解题思路 这道题目介绍2种方法。 解法一:利用位运算来做,数组中所有的数字都是成对出现的,只有一个是单独出现的,那么我们可以利用异或的性质来做。Time:O(n),Space:O(1) 解法二:利用集合set的特性,把所有数字添加到集合中(每个数字只出现一次),然后将集合中的数字乘以2减去原来数 阅读全文
posted @ 2020-03-07 20:02 repinkply 阅读(218) 评论(0) 推荐(0)
摘要:一:解题思路 对于这样的题目,不能使用加(+)、减(-),从而求两数之和。连最基本的+,-都不能用,那么肯定就要想到位运算了。找到里面的规律,进而总结出一般性的结论出来。比如,来举个例子,9+11 在二进制的层面来进行运算,为什么要用9和11两个数呢?因为他们包含了相加的多种情况在里面。 二:完整代 阅读全文
posted @ 2020-03-07 17:26 repinkply 阅读(160) 评论(0) 推荐(0)