leetcode上的位运算
136-只出现过一次的数字
思路:可以考虑到数字以二进制形式存储,当两个不同的数字异或的时候会是true,所以把数组里的数字都一一处理一遍就可以了。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int res=0;
for(auto num:nums) res^=num;
return res;
}
};
201-数字范围按位与
思路:m和n每次向右平移一位直到相等为止,记录下平移的次数i,然后让m往左平移i位即为所求
class Solution {
public:
int rangeBitwiseAnd(int m, int n) {
int i=0;
while(m!=n){
m>>=1;
n>>=1;
i++;
}
return (m<<i);
}
};
477-汉明距离总和
思路:规律查找发现,每一位上1的数量乘于0的数量就是当前位的结果,然后统计相加就可以得出结果了。
class Solution {
public:
int totalHammingDistance(vector<int>& nums) {
int res=0,n=nums.size();
for(int i=0;i<32;i++){
int cnt=0;
for(int num:nums){
if(num&(1<<i)) cnt++;
}
res+=cnt*(n-cnt);
}
return res;
}
};
421-最大异或值
思路:
868-二进制间距
思路:

浙公网安备 33010602011771号