算法刷题笔记 二进制中1的个数(C++实现)

文章目录

题目描述

  • 给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。

输入格式

  • 第一行包含整数n
  • 第二行包含n个整数,表示整个数列。

输出格式

  • 共一行,包含n个整数,其中的第i个数表示数列中的第i个数的二进制表示中1的个数。

数据范围

  • 1 ≤ n ≤ 100000,
  • 0 ≤ 数列中元素的值 ≤ 10^9

基本思路

  • 这道题是一道典型的位运算的题目。一种常用的位运算是lowbit运算,即找出一个二进制数中最低位的1及其后面所有的0。例如,对于整数10,其二进制表示为1010,对该数字使用lowbit操作,得到的结果即1010中最后的一个1及其跟着的0,即10
  • lowbit操作的具体过程即将原始数字与该数字的补码进行按位与运算。
  • 每次将当前数字的lowbit结果从该数字中减去,相当于将原始数字中最后一位1修改为0。重复这个过程,到最后即可将原始数字中所有的1都修改为0,操作的次数即该二进制数中1的个数。

实现代码

cpp 复制代码
#include <cstdio>

const int N = 100010;
int arr[N];

int count_of_one(int n)
{
    int result = 0;
    while(n != 0)
    {
        n -= n & (-n);
        result ++;
    }
    return result;
}

int main(void)
{
    int n;
    scanf("%d", &n);
    for(int i = 0; i < n; ++i) scanf("%d", &arr[i]);
    for(int i = 0; i < n; ++i) printf("%d ", count_of_one(arr[i]));
    return 0;
}
相关推荐
Tim_107 分钟前
【算法专题训练】30、二叉树的应用
算法
夜晚中的人海8 分钟前
【C++】哈希表算法习题
c++·算法·散列表
水木姚姚13 分钟前
初识C++
开发语言·c++
权泽谦34 分钟前
新世代的 C++:当 ChatGPT 遇上模板元编程
开发语言·c++·chatgpt
Kuo-Teng39 分钟前
LeetCode 198: House Robber
java·算法·leetcode·职场和发展·动态规划
2501_9411114040 分钟前
C++中的状态模式实战
开发语言·c++·算法
SelectDB1 小时前
十亿 JSON 秒级响应:Apache Doris vs ClickHouse,Elasticsearch,PostgreSQL
算法
橘颂TA1 小时前
【剑斩OFFER】算法的暴力美学——除自身以外数组的乘积
算法·leetcode·职场和发展·结构与算法
源码之家1 小时前
机器学习:基于python租房推荐系统 预测算法 协同过滤推荐算法 房源信息 可视化 机器学习-线性回归预测模型 Flask框架(源码+文档)✅
大数据·python·算法·机器学习·数据分析·线性回归·推荐算法
循环过三天1 小时前
7.7、Python-常用内置函数
笔记·python·学习