博客
关于我
【位运算】15题-二进制中1的个数
阅读量:692 次
发布时间:2019-03-17

本文共 859 字,大约阅读时间需要 2 分钟。

题目描述

请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中1的个数。例如,将9表示为二进制是1001,有两位是1。因此,如果输入9,函数应输出2。

示例1:

输入:00000000000000000000000000001011

输出:3

解释:输入的二进制串00000000000000000000000000001011中共有三位为'1'。

示例2:

输入:00000000000000000000000010000000

输出:1

解释:输入的二进制串00000000000000000000000010000000中共有一位为'1'。

示例3:

输入:11111111111111111111111111111101

输出:31

解释:输入的二进制串11111111111111111111111111111101中共有31位为'1'。

解题思路

逐位判断法

通过与运算判断每一位是否为1,并统计1的总数。这是一种常见的位操作方法,具体步骤如下:

(1) 初始化统计变量res为0。

(2) 当处理的数n不为0时,执行以下步骤:

• 检查n的最低有效位是否为1:若n&1等于1,就将res加一。

• 将n右移一位(这里需要使用无符号右移操作)。

(3) 当n变为0时,循环结束,返回res即为1的总数。

算法流程

代码示例(Java):

```javapublic class Solution { public int hammingWeight(int n) { int res = 0; while (n != 0) { res += n & 1; n >>= 1; } return res; }}```

(注:在Java中,`n >>= 1` 是无符号右移操作,确保处理时作为无符号数进行计算。)

复杂度分析

时间复杂度:O(log n),因为每次循环处理一次二进制位,最多处理30次(对于32位数字而言)。

空间复杂度:O(1),只使用了一个变量res进行计数,无额外空间需求。

转载地址:http://wvchz.baihongyu.com/

你可能感兴趣的文章
NLog类库使用探索——详解配置
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>
NLP 模型中的偏差和公平性检测
查看>>
Vue3.0 性能提升主要是通过哪几方面体现的?
查看>>
NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
查看>>
NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
查看>>
NLP三大特征抽取器:CNN、RNN与Transformer全面解析
查看>>
NLP学习笔记:使用 Python 进行NLTK
查看>>
NLP度量指标BELU真的完美么?
查看>>
NLP的不同研究领域和最新发展的概述
查看>>
NLP的神经网络训练的新模式
查看>>
NLP采用Bert进行简单文本情感分类
查看>>
NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
查看>>
NLP项目:维基百科文章爬虫和分类【02】 - 语料库转换管道
查看>>
NLP:使用 SciKit Learn 的文本矢量化方法
查看>>
nmap 使用方法详细介绍
查看>>
Nmap扫描教程之Nmap基础知识
查看>>
nmap指纹识别要点以及又快又准之方法
查看>>
Nmap渗透测试指南之指纹识别与探测、伺机而动
查看>>
Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
查看>>