package code;
//题目描述:二进制中1的个数。
//输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
/*
最优解:
如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,
那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1
(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。
举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。
减去1后,第三位变成0,它后面的两位0变成了1,而前面的1保持不变,
因此得到的结果是1011.我们发现减1的结果是把最右边的一个1开始的所有位都取反了。
这个时候如果我们再把原来的整数和减去1之后的结果做与运算,
从原来整数最右边一个1那一位开始所有位都会变成0。如1100&1011=1000.
也就是说,把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0.
那么一个整数的二进制有多少个1,就可以进行多少次这样的操作。
解二:
首先判断n是不是负数,当n为负数的时候,直接用后面的while循环会导致死循环,
因为负数向右移位的话最高位补1 ! 因此需要一点点特殊操作,可以将最高位的符号位1变成0,
也就是n & 0x7FFFFFFF,这样就把负数转化成正数了,唯一差别就是最高位由1变成0,
因为少了一个1,所以count加1。之后再按照while循环里处理正数的方法来操作就可以啦!
*/
public class Offer11
{
public static void main(String[] args)
{
Offer11 offer = new Offer11();
}
public int NumberOfOne(int n)
{
int count = 0;
while (n != 0)
{
count++;
n = n&(n-1);
}
return count;
}
public int NumberOfOne2(int n)
{
int count = 0;
if(n < 0)
{
n = n & 0x7FFFFFFF;
count++;
}
while(n != 0)
{
count += n & 1;
n = n >> 1;
}
return 0;
}
}
相关推荐
把MinerU集成到Dify
本文介绍了如何将本地部署的MinerU与Dify平台进行集成。首先需要确保Dify和MinerU在Docker环境中正常运行,并通过配置虚拟网络实现互联。然后详细说明了在Dify平台安装MinerU插件的步骤,包括从插件市场搜索安装、配置连接参数等关键操作。特别强调了要等待MinerU容器完全启动(healthy状态)后再进行Dify配置,否则会出现连接错误。通过简单的URL指向和API密钥设置,用户即可实现Dify平台与本地MinerU算力网络的对接,为后续的AI应用开发提供基础支持。
剑指 Offer 15. 二进制中1的个数
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。 在 Java 中,编译器使用 二进制补码 记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。 示例 1: 输入:n = 11 (控制台输入
学术版GPT安装教程——保姆版(附带原生GPT注册教程)
学术版GPT图文安装教程
【剑指 offer】二进制中1的个数
输入一个整数 n ,输出该数32位二进制表示中 1 的个数。其中负数用补码表示。
相机图像质量研究(22)常见问题总结:CMOS期间对成像的影响--光学串扰
光学串扰是一个比较难以理解的光学现象,实际影响往往不大。一、光学串扰产生的原因通常是入射角度太大,光线在不同通道之间产生了混叠二、光学串扰产生的现象光学串扰容易导致迷宫纹。总结本节讲了光学串扰产生的原因,现象。
从拆箱到跑通:Intel RealSense D435i开箱实测+ROS驱动配置全流程
本文详细记录了Intel RealSense D435i深度相机的开箱体验,并提供了在Ubuntu 22.04与ROS2 Humble环境下,从安装librealsense2 SDK到配置ROS2驱动的完整流程。重点解决了驱动安装、数据流发布、点云对齐以及IMU数据融合等关键步骤,帮助研究者和开发者快速实现D435i与机器人系统的集成。
《剑指offer刷题笔记》14、二进制中1的个数 【c++详细题解】
题目 输入一个 323232 位整数,输出该数二进制表示中 111 的个数。 注意: 负数在计算机中用其绝对值的补码来表示。 样例1 输入:9 输出:2 解释:9的二进制表示是1001,一共有2个1。 样例2 输入:-2 输出:31 解释:-2在计算机里会被表示成11111111111111111111111111111110, 一共有31个1。 思路1 lowbit(x)lowbit(x)lowbit(x)函数的作用 lowbit(x)lowbit(x)lowbit(x)操作返回 xx
学Simulink--复杂路况场景实例:基于Simulink的智能车辆高速公路行驶仿真(超车与车道变换)
本文详细介绍了基于Simulink的智能车辆高速公路超车仿真系统设计方法。系统包含多车道交通流建模、三层超车决策逻辑(触发条件、可行性检查、执行许可)、五次多项式变道轨迹规划以及横向纵向协同控制等核心模块。通过设定三车道场景(自车初始速度100km/h,前方慢车72km/h),演示了如何实现安全高效的左变道超车全过程(5秒完成3.75m横向移动),并验证了变道平滑性(最大横向加速度1.8m/s²)和安全距离(最小TTC 5.2s)。文章还强调了传感器融合的必要性,并提供了从交通流生成到控制器设计的完整Sim
剑指Offer面试题10(Java版):二进制中的1的个数
题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1,因此如果输入9,该函数输出2. 1、可能引起死循环的解法 这是一道很基本的考察二进制和位运算的面试题。题目不是很难,面试官提出问题之后,我们很快形成一个基本的思路:先判断证书二进制表示中最右边一位是不是1.接着把输入的证书右移一位,此时原来处于从右边树起的第二位被移到最后一位,再判断是
【1】Java 部分笔试题解析
解析A.abstract关键字应该放在class关键字之前。C.抽象方法不能有方法体。D缺少了class关键字。
在 SAP SD 模块里,销售订单号既可以由系统“自动”产生,也可以由用户“手工”输入,核心取决于“号码段(Number Range)”与“订单类型(Sales Document Type)”这两处配
SAP销售订单编号配置指南:系统提供内部自动编号和外部手工编号两种方式,通过VN01定义号码段(内部/外部),VOV8分配给订单类型并设置"ExtNo.Rq"选项即可切换。高阶应用支持灵活编号(如加前缀)或通过增强出口完全自定义编号规则。配置时需注意号码段创建、分配及传输问题,常见故障包括号码范围不存在或配置错误。核心是"号码段+订单类型"的组合控制编号生成方式,满足从简单到复杂的业务需求。
【剑指offer】二进制中1的个数
剑指offer上的第10题,在九度OJ上测试通过。 时间限制:1 秒内存限制:128 兆 题目描述: 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 输入: 输入可能包含多个测试样例。 对于每个输入文件,第一行输入一个整数T,代表测试样例的数量。对于每个测试样例输入为一个整数。 。n保证是int范围内的一个整数。
[QMT量化交易小白入门]-四十四、年化收益48%的策略要兼容回测和实盘,将实盘改为定时任务的方式
本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。
剑指offer第11题:二进制中1的个数
剑指offer第11题:二进制中1的个数题目描述分析二进制 原码、反码、补码源码 题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 例如:输入1 输出1 分析 二进制 原码、反码、补码 二进制储存: 在计算机中,正整数储存用的原码,负整数储存用的补码。 与运算:整数a的二进制末尾是1,则a & 1 = 1,否则 a & 0 = 0,所以可以用循环将整数右移...
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
复分析 阿尔福斯(Ahlfors) 第三版答案 英文
答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案
剑指Offer11:二进制中1的个数
剑指Offe11:二进制中1的个数 1.题目 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 2.思路 多余一个整数的二进制数进行减一操作,可以让他们从倒数第一个1开始不同,然后再减一,通过重复的相与操作,就可以得到答案 3.代码 class Solution { public: int NumberOf1(int n) { int count = ...
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
《剑指Offer》11. 二进制中1的个数
题目:11. 二进制中1的个数 知识点:位运算 题目描述: 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 解题思路: 解法一:这是我当时自己的思路,即通过除二取余法来求输入的十进制数字的二进制的每一位,再判断其是否为一,当输入数字为负数的时候,取其补码(原数字取反加一),我使用的取补码的方式是直接用无符号的最大值加上负数再加一,相当于负数补码对应的正数,然后再使用前面...
NTscan扫描工具
ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。
剑指offer11:二进制中1的个数(Java)
剑指offer11:二进制中1的个数(Java)题目思路代码 题目 输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。 输入输出示例: 思路 举个例子,14的二进制位1110。先将1110-1得到1101,再将1110与1101做&操作,得到1100。以此类推,在进行三次这种操作之后,1110变成了0000。3次操作就对应了1110的1的个数。 代码 代码如下(示例): public class Solution { public int NumberOf1(in
【剑指offer】11-二进制中1的个数
本文系《剑指offer》的刷题记录,通过牛客网在线平台测试通过。 在线测试平台:牛客网 编程资料获取:CodeLab 1-Description 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示 2-Solution 1-右移整数 注意这里强调了负数的存在,如果我们单纯的将整数n逐位进行右移将进入死循环,例如将负数0x80000000右移1位的时候,并不是简单地把最高位1移到...
剑指offer11.二进制中1的个数
https://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8?tpId=13&tqId=11164&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述 输入一个整数,输...
剑指Offer11 二进制中1的个数
剑指Offer11 二进制中1的个数 题意 输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。 思路 做这个题目时,发现自己对计算机中补码反码原码的理解不够深入,这里再复习一下: 在计算机中,所有的数值都是以其补码表示的,因为用补码可以将两个数的剑法转化为加法,方便加法器工作。 对于正数,其源码、补码、反码都是一致的(除此之外还有移码,就是将补码的符号位取反),一般以最高位作为符号位,正数的符号位为0,负数为1,则例如32位(4字节)的有符号整型数,第一位是符号位,低位的31位是数值位,
11 图解剑指Offer 二进制中1的个数 Java题解
11 图解剑指Offer 二进制中1的个数 Java题解11 图解剑指Offer 二进制中1的个数 Java题解题目链接题目描述题解:图解:代码:复杂度 11 图解剑指Offer 二进制中1的个数 Java题解 题目链接 题目描述 输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。 题解: n & (n - 1)的左右是消除最右边的1,每循环一次count++,即可求出1的个数,while循环直到 n 等于0。 图解: 代码: public class Solution {
11二进制中1的个数--剑指Offer, java版
11二进制中1的个数–剑指Offer, java版 先把整数n最右边一位与1做位与运算,看结果是不是1;再把整数右移一位,直到整个整数变为0为止。但是这个解法很容易陷入死循环,故不考虑 为避免死循环,不右移整数n。而是首先把n和1做与运算,判断最低位是不是1;接着把1左移一位,得到2,再和n做与运算,判断n的次低位是不是1;这样反复左移。 这种解法中循环的次数等于整数二进制的位数 public...
java 整数变负数_Java版剑指offer编程题第11题--二进制中1的个数
跟learnjiawa一起每天一道算法编程题,既可以增强对常用API的熟悉能力,也能增强自己的编程能力和解决问题的能力。算法和数据结构,是基础中的基础,更是笔试的重中之重。不积硅步,无以至千里;不积小流,无以成江海。题目描述Java版剑指offer编程题第11题--二进制中1的个数,输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。我的想法逐个判断输入整数二进制的每一位是否为1,添加...
【剑指offer】11——二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
【牛客】剑指Offer——11. 二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 关于什么是补码,可以参考:负数在计算机中的保存。这里简要概述一下: 每一个二进制位都取相反值,0变成1,1变成0。比如,00001000的相反值就是11110111。 将上一步得到的值加1。11110111就变成11111000。 使用补码,可以使得二进制整数加法运算变得更加自然。 Python解答 1. 错误...
11、剑指offer - 二进制中1的个数
考点: 位运算 题目描述: 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 解题: class Solution { public: int NumberOf1(int n) { int count = 0; while(n){ n = n & (n-1); count +...
313



被折叠的 条评论
为什么被折叠?



