![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
位运算
只会写臭虫
这个作者很懒,什么都没留下…
展开
-
LeetCode 137. 只出现一次的数字 II
将每个数想象成32位的二进制,对于每一位的二进制的1和0累加起来必然是3N或者3N+1, 为3N代表目标值在这一位没贡献,3N+1代表目标值在这一位有贡献(=1),然后将所有有贡献的位|起来就是结果。这样做的好处是如果题目改成K个一样,只需要把代码改成cnt%k,很通用。 代码: class Solution { public int singleNumber(int[] nums) { ...原创 2019-06-24 22:12:42 · 109 阅读 · 0 评论 -
LeetCode 187. 重复的DNA序列
因为只有四种核苷酸,所以用0,1,2,3分别表示四种核苷酸,那么每个核苷酸就可以用一个2位的二进制表示,所以我们可以将一个10个子母长的序列转化为一个20位的二进制序列。然后通过滑动窗口的方式扫描整个串。 代码: class Solution { public: vector<string> findRepeatedDnaSequences(string s) { ...原创 2019-06-24 22:39:08 · 267 阅读 · 0 评论 -
LeetCode 190. 颠倒二进制位
class Solution { public: uint32_t reverseBits(uint32_t n) { uint32_t ans=0; for(int i=0;i<32;i++){ ans=ans|((n&1)<<(31-i)); n=n>>1...原创 2019-06-24 23:42:08 · 80 阅读 · 0 评论 -
LeetCode 260. 只出现一次的数字 III
思路, 先全部异或一次, 得到的结果, 考察其的某个非0位(比如最高非0位), 那么只出现一次的两个数中, 在这个位上一个为0, 一个为1, 由此可以将数组中的元素分成两部分,重新遍历, 求两个异或值。 代码: class Solution { public: vector<int> singleNumber(vector<int>& nums) { ...原创 2019-06-25 00:37:57 · 124 阅读 · 0 评论