2026-01-22-牛客每日一题-二进制不同位数


title: 2026-01-22-牛客每日一题-二进制不同位数

date: 2026-01-22

tags:

  • 算法学习
  • 牛客
  • 位运算

题目信息

  • 平台:牛客
  • 题目:二进制不同位数
  • 难度:简单
  • 题目链接

题目描述

给定两个整数 m、n,计算它们二进制表示中不同位的数量。


初步思路

  1. 不同位的数量等价于 m 与 n 的异或结果中 1 的个数。
  2. x = m ^ n 得到所有不同位。
  3. 通过 x &= x - 1 每次消去最低位的 1,并计数。
md 复制代码
示例
x     = 1100111 | 1100100
x-1   = 1100110 | 1100011
x&x-1 = 1100110 | 1100000

最低位的1消去了

算法分析

  • 核心:异或 + 统计二进制 1 的个数
  • 技巧:Brian Kernighan 位计数法
  • 时间复杂度:O(k),k 为不同位数量(x 中 1 的个数)
  • 空间复杂度:O(1)

代码实现(C++)

cpp 复制代码
/*
 * @Author: tkzzzzzz6
 * @Date: 2026-01-22 22:21:35
 * @LastEditors: tkzzzzzz6
 * @LastEditTime: 2026-01-22 22:21:39
 */

#include <iostream>
using namespace std;

int main() {
    int m,n;
    cin >> m >> n;
    int x = m^n;
    int ans =0;
    while(x !=0){
        x &=x-1;
        ++ans;
    }
    cout << ans;
    return 0;
}

总结与反思

  1. 用异或能直接锁定不同位。
  2. 位计数法比逐位扫描更简洁高效。
相关推荐
穿越临界点10 小时前
动态规划(DP)
算法·动态规划·贝尔曼
leoufung10 小时前
LeetCode 50. Pow(x, n):从 O(n) 到 O(log n) 的快速幂彻底搞懂
算法·leetcode·职场和发展
@小码农10 小时前
2026年信息素养大赛【星火征途】图形化编程复赛和决赛模拟题B
开发语言·数据结构·c++·算法
人道领域10 小时前
【LeetCode刷题日记】347.前k个高频元素
java·数据结构·算法·leetcode
七颗糖很甜10 小时前
台风数据免费获取教程
大数据·python·算法
AI科技星10 小时前
《全域数学》第一部·数术本源
算法·机器学习·数学建模·数据挖掘·量子计算
阿Y加油吧11 小时前
二刷 LeetCode:118. 杨辉三角 & 198. 打家劫舍 复盘笔记
笔记·算法·leetcode
深邃-11 小时前
【数据结构与算法】-二叉树(1):树的概念与结构,二叉树的概念与结构
数据结构·算法·链表·二叉树··顺序表
风筝在晴天搁浅11 小时前
手撕归并排序
数据结构·算法·排序算法
lynnlovemin11 小时前
C++高精度加减乘除算法详解
开发语言·c++·算法·高精度