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. 位计数法比逐位扫描更简洁高效。
相关推荐
To_OC2 小时前
LC 35 搜索插入位置:二分查找谁都会,边界条件谁写谁懵
javascript·算法·leetcode
码哥DFS3 小时前
二叉树的直径
开发语言·javascript·算法
营养充电站6 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
人工智能·算法·docker·jupyter
技术小黑6 小时前
RNN算法实战系列05 | 天气预测
人工智能·rnn·算法
Ivanqhz9 小时前
php8 use-def链
算法·php
evans在进步9 小时前
LeetCode 189 轮转数组:三次反转原地解决,图解 Java 实现
java·算法·leetcode
歌_顿9 小时前
Drawing_To_Model
算法
龍德明宇9 小时前
AI不会疼-龍德明宇
人工智能·算法·大语言模型llm·负主体性·ai存在论
302wanger10 小时前
程序员写 SOP:把脑子里的流程固化下来
算法