一:判定字符是否唯一

class Solution {
public:bool isUnique(string astr) {if(astr.size() > 26) return false;int ret = 0;for(auto x : astr){int i = x-'a';if(((ret>>i)&1) == 1) return false;ret = ret | (1<<i);}return true;}
};
二:丢失的数字

class Solution {
public:int missingNumber(vector<int>& nums) {int ret = 0;for(auto x : nums) ret ^= x;for(size_t i = 0; i < nums.size()+1; i++) ret ^= i;return ret;}
};
三:两整数之和

class Solution {
public:int getSum(int a, int b) {// 异或运算, 无进位相加int x = a ^ b;int y = (a&b)<<1;while(y){a = x, b = y;x = a ^ b;y = (a & b) << 1;}return x;}
};
四:只出现一次的数字II

class Solution {
public:int singleNumber(vector<int>& nums) { int ret = 0;for(int i = 0; i < 31; i++) // 依次修改ret的每一位{int sum = 0;for(auto x : nums) // 计算nums中所有数的第 i 位的和{if(((x>>i)&1) == 1)sum++;}sum %= 3;if(sum == 1) ret = ret | (1<<i);}return ret;}
};
五:消失的两个数字

class Solution {
public:vector<int> missingTwo(vector<int>& nums) {int ret = 0;for(auto x : nums) ret ^= x;for(size_t i = 1; i <= nums.size()+2; i++){ret ^= i;}// a^b = ret, 求a, bint diff = 0;while(1){if(((ret>>diff)&1) == 1) break;diff++;}// 找到比特位 1 的位置了// 3.根据diff的不同,分割出来两个数a,bint a = 0, b = 0; for(auto x : nums){if(((x>>diff)&1) == 1) b^=x;else a^=x;}for(size_t i = 0; i <= nums.size()+2; i++){if(((i>>diff)&1) == 1) b^=i;else a^=i;}return {a,b};}
};