hot100题简单题

力扣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;
    }
};
 
 
 
 
 
 
 
 
 
 
posted @ 2025-09-24 18:27  往事携冷风  阅读(9)  评论(0)    收藏  举报