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. 位计数法比逐位扫描更简洁高效。
相关推荐
叶小鸡28 分钟前
小鸡玩算法-力扣HOT100-动态规划(上)
算法·leetcode·动态规划
LuminousCPP34 分钟前
数据结构 - 线性表第三篇:基于顺序表实现 C 语言通讯录(基础功能篇)
c语言·数据结构·经验分享·笔记·算法
_日拱一卒38 分钟前
LeetCode:114二叉树展开为链表
java·开发语言·算法
无小道1 小时前
Redis——哈希类型相关指令
redis·算法·哈希算法
凌波粒1 小时前
LeetCode--513.找树左下角的值(二叉树)
java·算法·leetcode
一个不知名程序员www1 小时前
算法学习入门---算法题DAY1
c++·算法
子琦啊1 小时前
构造函数、this指向和原型链机制
javascript·算法·贴图
WHS-_-20221 小时前
Millimeter Wave ISAC-SLAM: Framework and RFSoC Prototype
人工智能·算法·原型模式
吃好睡好便好1 小时前
在Matlab中绘制杆状图
开发语言·学习·算法·matlab·信息可视化
带带弟弟学爬虫__1 小时前
dyAPP数据采集-个人主页、发布、搜索、评论
服务器·python·算法·flutter·java-ee·django