力扣136题 只出现一次的数字
采用异或的方法
class Solution {
public:
int singleNumber(vector<int>& nums) {
int x = 0;
for(int num:nums){ //1.遍历 numx执行异或运算
x ^= num;
}
return x; //2.返回出现一次的数字x
}
};
力扣 169题 多数元素
将数组nums中的所有元素按照单调递增或者单调递减的顺序排序,那么下标为n/2的元素(下标从0开始)一定是众数。
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(nums.begin(),nums.end());
return nums[nums.size()/2];
}
};
力扣 461题 汉明距离
n&n-1的值是去掉二进制n最右边1的值,每次运算都会消去一个1直到最终为0为止。
解题方法就是:两数异或(不同位为1),剩下二进制为1的就是不同二进制位,计1个数即汉明距离
class Solution {
public:
int hammingDistance(int x, int y) {
int ret = x^y; //异或剩下1的个数就是二进制位不同的位置的数目
int ans = 0; //answer 记录1的个数
while(ret){ //每一次运算消去一个1,直到为0终止循环
ret &= (ret-1); //ret = ret &(ret-1);
ans++;
}
return ans;
}
};
力扣448题 找到所有数组中消失的数字
直接遍历整个数组,找个一个元素就将其counts值加1,最后将counts值为0的元素,也就是没出现过的数字放在ret数组中返回即可。
class Solution {
public:
vector<int> findDisappearedNumbers(vector<int>& nums) {
vector<int> counts(nums.size()+1);
for(int i=0;i<nums.size();i++){
counts [nums[i]]++;
}
vector<int> res;
for(int i=1;i<counts.size();i++){
if(counts[i]==0){
res.push_back(i);
}
}
return res;
}
};