【五月集训】第十天打卡(位运算)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


136. 只出现一次的数字

题目链接

只出现一次的数字

思路

异或消消看

  • 利用异或特性,两个相同的进行异或相消可解这题

题解

var singleNumber = function (nums) {
    let res = 0;
    for (let i = 0; i < nums.length; i++) {
        res ^= nums[i];
    }
    return res;
};

191. 位1的个数

题目链接

位1的个数

思路

利用位与消一的特征,遇到1计算加一

位与又被称为无进位相加

题解

function hammingWeight(n: number): number {
    let res = 0;
    while (n) {
        n &= n - 1;
        res++;
    }
    return res;

};

461. 汉明距离

题目链接

汉明距离

思路

对于两个数来说,如果相同位置的二进制相同,则对应汉明距离为0,否则为1,满足异或的性质,所以将两个数异或,求异或结果后位一的个数

题解

 var hammingWeight = function (n) {
    let res = 0
    while (n) {
        n &= (n - 1)
        res++
    }
    return res
};
var hammingDistance = function(x, y) {
   let num = y^x;
    return hammingWeight(num)
};

137. 只出现一次的数字 II

题目链接

只出现一次的数字 II

思路

  • 将每个数转换成二进制以后排列起来
  • 将每个位分别计算,如果加起来是3的倍数,说明只出现一次的数的对应位是0,否则是1

题解

function singleNumber(nums: number[]): number {
    let ret = 0;
    for (let i = 0; i < 32; i++) {
        let ans = 0
        for (let j = 0; j < nums.length; ++j) {
            ans += (nums[j] >> i) & 1
        }
        ans %= 3
        if (ans) {
            ret += 1 << i
        }
    }
    return ret
};
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值