LeetCode-位运算
LeetCode-位运算
我是一名程序媛
这个作者很懒,什么都没留下…
展开
-
371. 两整数之和
2020-05-281.题目描述两整数之和2.题解首先我们需要计算出当前位now为多少,这里我们使用^其次我们需要计算出进位carry是多少,这里我们使用&当我们求得这两个数的时候,当前的题目就转化成了now+carry,我们需要一直这么迭代直到carry为03.代码class Solution {public: int getSum(int a, int b) { while (b){ int now=a^b;原创 2020-05-28 14:33:52 · 112 阅读 · 0 评论 -
268. 缺失数字
2020-05-281.题目描述缺失数字2.题解nums中的数与0~n中的数合并起来只有一个数出现了一次,这个数就是我们要找的数。3.代码class Solution {public: int missingNumber(vector<int>& nums) { int l=nums.size(); if (l==0) return 0; int res=nums[0]; for (int i=1;原创 2020-05-28 10:28:58 · 109 阅读 · 0 评论 -
191. 位1的个数
2020-05-271.题目描述位1的个数2.题解1.直接看每个位是0还是1即可,此时的时间复杂度为数n二进制表示的位数,那有没有办法能够使其时间复杂度等于1的个数呢?2.n&(n-1)可以将n二进制表示最右边的1变成0,我们可以一直重复这个操作。3.题解class Solution {public: int hammingWeight(uint32_t n) { int cnt=0; while (n){ n=n原创 2020-05-27 21:41:44 · 84 阅读 · 0 评论 -
190. 颠倒二进制位
2020-05-271.题目描述颠倒二进制位2.题解如果是一个十进制整数进行反转的话,很容易想到的就是得到其每一个位的数,然后进行计算。除了用取余的方法可以知道某个数二进制表示的每个位是0/1之外,我们也可以使用位的与运算,如果一个数与1进行&操作,其结果就是最后一个二进制位是多少,比如5(101),5&1->101&001,直接可以得出最后一个二进制位为1,(n>>i)&1就表示数n二进制表示中第i个二进制位为多少。3.代码class原创 2020-05-27 19:50:52 · 113 阅读 · 0 评论 -
169. 多数元素
2020-05-271.题目描述多数元素2.题解1.使用map来统计每个数出现的次数3.代码class Solution {public: int majorityElement(vector<int>& nums) { int l=nums.size(); int cnt=1; int value=nums[0]; // 非空 for (int i=1;i<l;i++){原创 2020-05-27 19:32:50 · 140 阅读 · 0 评论 -
136. 只出现一次的数字
2020-05-271.题目描述只出现一次的数字2.题解使用异或运算即可,相同为0,不同为1,所有的结果异或的结果就是只出现一次的那个数。3.代码class Solution {public: int singleNumber(vector<int>& nums) { int l=nums.size(); int res=nums[0]; // 非空整数数组 for (int i=1;i<l;i++){原创 2020-05-27 16:31:28 · 83 阅读 · 0 评论 -
78. 子集
2020-05-271.题目描述子集2.题解1.递归,集合中的每个数都面临着选与不选2.使用二进制位的0/1来表示选/不选,假设集合中共有n个元素,1<<n表示一共有2^n种情况,对于每一种情况,如果其二进制位上的值为1则表示添加进来。3.代码class Solution {public: vector<vector<int>> res; vector<vector<int>> subsets(vector&l原创 2020-05-27 16:08:49 · 84 阅读 · 0 评论