当前位置: 首页 > news >正文

算法41:位1的个数

一、需求

编写一个函数,获取一个正整数的二进制形式并返回其二进制表达式中
设置位的个数(也被称为汉明重量)。

示例 1:

输入:n = 11
输出:3
解释:输入的二进制串 1011 中,共有 3 个设置位。

示例 2:

输入:n = 128
输出:1
解释:输入的二进制串 10000000 中,共有 1 个设置位。

示例 3:

输入:n = 2147483645
输出:30
解释:输入的二进制串 11111111111111111111111111111101 中,共有 30 个设置位。

提示:

1 <= n <= 2^31 - 1

进阶:

如果多次调用这个函数,你将如何优化你的算法?

二、思路分析图

(一)循环检查二进制位

在这里插入图片描述

三、代码

(一)数据初始化

/*** 入口* 191、位1的个数* 输入:* nums = 11(1101)* 输出:(1的个数)* result1 = 3* 解释:* 1.循环检查二进制位* 2.位运算优化* 3.循环检查二进制位调优*/
@Test
public void suanfa43()
{// 初始化int num = 11;int index = getHammingWeight(num);System.out.println("循环检查二进制位 = " + index);int index1 = getHammingWeightOne(num);System.out.println("位运算优化 = " + index1);int index2 = getHammingWeightTow(num);System.out.println("循环检查二进制位调优 = " + index2);
}

(二)循环检查二进制位【自己写的方案】

/*** 循环检查二进制位** @param n* @return*/
private int getHammingWeight(int n)
{int index = 0;while (n != 0){if (n % 2 == 1){index++;}n /= 2;}return index;
}

(三)位运算优化

/*** 位运算优化** @param n* @return*/
private int getHammingWeightOne(int n)
{int ret = 0;while (n != 0) {n &= n - 1;ret++;}return ret;
}

(四)循环检查二进制位调优

/*** 循环检查二进制位调优** @param n* @return*/
private int getHammingWeightTow(int n)
{int index = 0;while (n != 0){index += n % 2;n /= 2;}return index;
}

(五) 结果图

在这里插入图片描述

作者:王子威

四、总结

  • 学习了位1的个数算法
  • 主要采用二进制计算逻辑
  • 调优发现没必要判断,所有的模加起来也是一样的
  • 算法兴趣+1 总:41
  • 加强了对算法的分析能力

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【人工智能学习笔记】4_1 深度学习基础之深度学习概述
  • 数据同步-Mysql同步到ElasticSearch
  • perl的学习记录——仿真regression
  • 【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn
  • Jeremy Howard对创业,AI产品,技术趋势,社区的看法
  • 万龙觉醒免费辅助:VMOS云手机辅助巴克尔阵容搭配攻略!
  • jQuery基础2-css的操作-事件-属性-Ajax-DOM操作
  • Redis访问工具
  • 【系统架构设计师】建造者模式(Builder Pattern)
  • 苹果手机铃声怎么设置自己的歌?3个方法自定义手机铃声
  • Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取相机当前数据吞吐量(Python)
  • MySQL里面的日期字符串如何转成日期做比较运算,获取两个日期之间的所有日期(包括起始日期)
  • 【计算机方向】中科院一区TOP!国人发文占比50%,录用比例容易,晋升宝刊!
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • 双目标定测距C++代码记录
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • C++类中的特殊成员函数
  • Java精华积累:初学者都应该搞懂的问题
  • JAVA之继承和多态
  • Python学习之路13-记分
  • TCP拥塞控制
  • 复习Javascript专题(四):js中的深浅拷贝
  • 基于组件的设计工作流与界面抽象
  • 聊聊flink的TableFactory
  • 前端临床手札——文件上传
  • 前端之Sass/Scss实战笔记
  • 嵌入式文件系统
  • 微信小程序--------语音识别(前端自己也能玩)
  • 新书推荐|Windows黑客编程技术详解
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 阿里云API、SDK和CLI应用实践方案
  • 关于Android全面屏虚拟导航栏的适配总结
  • 湖北分布式智能数据采集方法有哪些?
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​flutter 代码混淆
  • ​Linux·i2c驱动架构​
  • #微信小程序(布局、渲染层基础知识)
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (2)nginx 安装、启停
  • (day6) 319. 灯泡开关
  • (分布式缓存)Redis持久化
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (十三)Flask之特殊装饰器详解
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • ../depcomp: line 571: exec: g++: not found
  • .NET6 命令行启动及发布单个Exe文件
  • .NET成年了,然后呢?
  • .NET周刊【7月第4期 2024-07-28】
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @antv/x6 利用interacting方法来设置禁止结点移动的方法实现。
  • @ModelAttribute使用详解
  • @Slf4j idea标红Cannot resolve symbol ‘log‘
  • [2016.7 day.5] T2
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——