算法41:位1的个数

news2024/11/20 22:39:28

一、需求

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

示例 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
  • 加强了对算法的分析能力

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2128451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VS2019界面介绍

文章目录 1、界面组成2、调试配置界面3、调试相关快捷键使用4、调试过程设置以及窗口 1、界面组成 1&#xff09;新建文件 筛选器 目录 2&#xff09;大纲显示 3&#xff09;IntelliSense智能提醒 IntelliSense 智能提醒IntelliSense 是一组功能&#xff0c;可用于在编辑器中…

VLAN配置学习笔记

1、VLAN的基础配置命令 &#xff08;1&#xff09;创建VLAN [Huawei] vlan vlan-id 通过此命令创建VLAN并进入VLAN视图&#xff0c;如果VLAN已存在&#xff0c;直接进入该VLAN的视图。 vlan-id是整数形式&#xff0c;取值范围是1&#xff5e;4094。 [Huawei] vlan batch {…

Gitea Action 简单配置(CI/CD)

线上pipeline,&#xff08;我使用是本地仓库的&#xff0c;你们使用切换成官网的即可&#xff09; # 工作流的名称name: Build and Push Docker Image deployment-k8s# 触发条件&#xff0c;只在 master 或 main 分支发送推送时触发 on:push:branches:- main# 作业&#xff0c…

网络学习-eNSP配置VRRP

虚拟路由冗余协议(Virtual Router Redundancy Protocol&#xff0c;简称VRRP) VRRP广泛应用在边缘网络中&#xff0c;是一种路由冗余协议&#xff0c;它的设计目标是支持特定情况下IP数据流量失败转移不会引起混乱&#xff0c;允许主机使用单路由器&#xff0c;以及即使在实际…

什么是数据库回表,又该如何避免

目录 一. 回表的概念二. 回表的影响三. 解决方案1. 使用覆盖索引2. 合理选择索引列3. 避免选择不必要的列4. 分析和优化查询5. 定期更新统计信息6. 避免使用SELECT DISTINCT或GROUP BY7. 使用适当的数据库设计 数据库中的“回表”是指在查询操作中&#xff0c;当数据库需要访问…

时尚穿搭想换就换,各种风格一键完美搭配!亲测在线虚拟试衣换装平台效果超赞!

随着科技的发展&#xff0c;时尚领域也迎来了新的革命。传统的试衣方式逐渐被现代科技所取代&#xff0c;虚拟试衣间的出现使得用户可以在舒适的家中轻松体验不同的服装风格。 先前给大家也介绍过一些虚拟试衣的技术&#xff0c;例如AnyFit或者OutfitAnyone等&#xff0c;今天…

YOLOv8改进 | 模块缝合 | C2f 融合SCConv提升检测性能【CVPR2023】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

智能负载均衡:分布式缓存的高效能解决方案

在当今快速发展的互联网时代&#xff0c;分布式缓存成为了提升网站性能和用户体验的关键技术。本文将深入探讨负载均衡算法在分布式缓存中的应用&#xff0c;分析各种算法的优缺点&#xff0c;并提供选择最佳算法的指导。通过实际案例&#xff0c;我们将展示如何通过智能的负载…

2024 年塑造 SaaS 安全的 7 大趋势

在过去的几年里&#xff0c;SaaS已经发展成为企业IT的支柱。医疗实践、律师事务所和金融服务公司等服务企业几乎完全基于 SaaS。非服务企业&#xff08;包括制造商和零售商&#xff09;将大约 70% 的软件运行在云中。 这些应用程序包含大量数据&#xff0c;从最低敏感的一般公司…

黑马点评25—原理—Redis网络模型

文章目录 原理篇-Redis网络模型1 用户空间和内核态空间2.网络模型-阻塞IO3 网络模型-非阻塞IO4 网络模型-IO多路复用5 网络模型-IO多路复用-select方式6 网络模型-IO多路复用模型-poll模式7 网络模型-IO多路复用模型-epoll函数8、网络模型-epoll中的ET和LT9 网络模型-基于epoll…

wireshark打开时空白|没有接口,卸载重装可以解决

解决方法&#xff1a;卸载wireshark,全选卸载干净&#xff0c;重新安装旧版的wireshark4.2.7, 甚至cmd下运行net start npf时显示服务名无效&#xff0c;但打开wireshark仍有多个接口 错误描述&#xff1a; 一开始下载的是wireshark的最新版&#xff0c;win11 x64 在安装wir…

JAVA——方法

public static 返回值类型 方法名(参数){//方法体return 数据; } 一、定义与调用 public class demo9_12 {public static void main(String[] args) {// 调用myName();}//定义public static void myName(){System.out.println("Hello World");} } 运行 二、含参数…

STM32G474之CALIB输出

STM32G474之CALIB输出源是1Hz和512Hz的时钟源。通过测试输出波形&#xff0c;计算RTC输入时钟和理论值之间的误差&#xff0c;为“校准”服务的。 1、CALIB输出原理 2、CALIB输出测试程序 #include "RTC.h" #include "stdio.h" //getchar(),putchar(),s…

蓝桥杯4. Fizz Buzz 经典问题

题目描述 给定一个整数 NN&#xff0c;从 1 到 NN 按照下面的规则返回每个数&#xff1a; 如果这个数被 3 整除&#xff0c;返回 Fizz。如果这个数被 5 整除&#xff0c;返回 Buzz如果这个数能同时被 3 和 5 整除&#xff0c;返回 FizzBuzz。如果这个数既不能被 3 也不能被 5…

智能医学(四)——Elsevier特刊推荐

特刊征稿 01 期刊名称&#xff1a; Information Sciences 特刊名称&#xff1a; Open-world Multi-modal Machine Learning for Uncertain Medicine and Healthcare Big Data Analysis 截止时间&#xff1a; 提交开放日期&#xff1a;2024 年 6 月 15 日 最终手稿提交截止…

sass实现文字两侧横线

sass实现文字两侧横线 自我记录 mixin 的基本作用&#xff1a; 代码复用&#xff1a;把常用的样式封装在一起&#xff0c;不需要重复写相同的代码。参数化&#xff1a;可以通过参数动态生成样式&#xff0c;提高灵活性。逻辑处理&#xff1a;结合 Sass 的控制语句&#xff0…

CAD 3dsmax maya等autodesk系列专用卸载修复工具AutoRemove,一键完全彻底卸载删除软件的专用卸载工具

AutoRemove 是一款功能强大的软件卸载工具&#xff0c;专门设计用于彻底清除Autodesk系列软件&#xff0c;如AutoCAD、3ds Max、Revit、Maya、Inventor、Navisworks、civil 3d、sketchbook、Architecture、Electrical、Mechanical、、等&#xff0c;从您的系统中。它通过深度清…

learn C++ NO.13——list

前言 本文将从list的使用&#xff0c;再到根据sgi库对于list实现作为参考模拟实现一下list。通过模拟实现来增加对它的理解。 介绍list list是一个由带头双向循环链表实现的STL容器&#xff0c;它提供常规时间内对数据进行插入和删除操作。 list在内存中存储不连续的空间存储…

Kamailio-超强dispatcher负载均衡模块

Kamailio 负载均衡的功能主要依靠 Dispatcher 模块完成&#xff0c;模块官方文档参看 为什么要引入负载均衡&#xff1f;如何使用&#xff1f; 引入和配置功能路由调用命令行指令 为什么要引入负载均衡&#xff1f; Q: 如果单台VOIP服务的性能不能满足业务需求了&#xff0…

掌握ZooKeeper的二阶段提交及其优缺点

1. ZooKeeper的协议 1.1 ZAB协议 要深入学习ZooKeeper前&#xff0c;胡广认为我们要先学习ZooKeeper的核心理念&#xff0c;所有的ZooKeeper行为都是围绕这个核心来进行的。说了那么多&#xff0c;它就是——ZAB协议。 ZAB协议英文全称叫ZooKeeper Atomic Broadcast&#xf…