Java 中不匹配位的数量2024年9月10日 | 阅读 9 分钟 在本教程中,我们将讨论 Java 中的不匹配位数问题。在此问题中,给出两个数字(f1 和 f2)。我们的任务是比较两个数字的二进制表示形式时,找出不匹配的位数。假设每个数字都适合 8 位。 示例 1 输入 int f1 = 9 int f2 = 15 输出 不匹配的总位数为 2。 解释 数字 9 在 8 位中的二进制表示是 00001001,数字 15 在 8 位中的二进制表示是 00001111。如果我们从左到右比较这两个二进制表示,我们会发现前五位匹配。第六位和第七位不匹配,因为数字 9 的这两位都是零,而数字 15 的这两位都是一。因此,有两位不匹配。所以,输出是 2。 示例 2 输入 int f1 = 32 int f2 = 31 输出 不匹配的总位数为 6。 解释 数字 32 在 8 位中的二进制表示是 00100000,数字 31 在 8 位中的二进制表示是 00011111。如果我们从左到右比较这两个二进制表示,我们会发现前两位匹配。之后,直到第八位都存在不匹配。数字 32 的第三位是 1,数字 31 的第三位是 0,而对于其余的其他位,数字 32 的值为 0,数字 31 的值为 1。因此,有 6 位不匹配。所以,输出是 6。 示例 3 输入 int f1 = 40 int f2 = 40 输出 不匹配的总位数为 0。 解释 由于两个数字相同,它们的二进制表示也将相同。因此,不匹配的位数将为零。所以,输出是 0。 简单方法最简单的方法是首先将两个数字(f1 和 f2)转换为它们的二进制表示。然后将它们的二进制表示存储在数组列表中(一个用于 f1 的二进制表示,另一个用于 f2 的二进制表示)。之后,使用循环,我们可以比较这些位并找出答案。请看以下程序。 文件名: MismatchingBits.java 输出 The number of mismatching bits for the numbers 9 and 15 is: 2 The number of mismatching bits for the numbers 32 and 31 is: 6 The number of mismatching bits for the numbers 40 and 40 is: 0 复杂度分析: 程序中有四个 while 循环和一个 for 循环。在这五个循环中,两个 while 循环和一个 for 循环都只运行常数时间。最后两个 while 循环和 for 循环在最坏情况下需要 O(8) 时间,这是常数。因此,程序的整体时间复杂度取决于前两个 while 循环。第一个 while 循环需要 O(dig1) 时间,第二个循环需要 O(dig2) 时间。因此,程序的整体时间复杂度为 O(dig1 + dig2),其中 dig1 是数字 f1 中存在的总位数,dig2 是数字 f2 中存在的总位数。空间复杂度为 O(8) 时间,这是常数。 我们可以避免使用数组列表来存储给定数字的位。下面的程序展示了这一点。 文件名: MisMatchBits1.java 输出 The number of mismatching bits for the numbers 9 and 15 is: 2 The number of mismatching bits for the numbers 32 and 31 is: 6 The number of mismatching bits for the numbers 40 and 40 is: 0 复杂度分析: 程序只使用一个循环,该循环只运行 O(8) 次,这是常数。而且,程序不使用任何额外的空间。因此,程序的时间和空间复杂度均为 O(1)。 使用 XOR 运算符找出不匹配位数的方法是使用按位 XOR。每当我们对两个数字应用按位 XOR 时,我们都会得到一个数字,其中那些位被设置为 1,表示这两个数字中的位不匹配。现在,计算 XOR 值中设置为 1 的位数。计算出的值就是我们的答案。让我们通过一个例子来理解这一点。 我们取两个数字,10 和 2。现在,10 ^ 2 = 8。这是因为 1010 ^ 0010 = 1000(值为 8)。我们看到,从右到左计算的第一个位设置为 1,因为数字 10 的第一个位是 1,而数字 2 的第一个位是 0(不匹配)。其余的其他位在两个数字中都匹配。因此,XOR 值中的其余位都是 0。 在 XOR 值中,我们看到只有一位设置为 1。因此,数字 10 和 2 的不匹配位数为 1。请看以下程序。 文件名: MismatchingBits2.java 输出 The number of mismatching bits for the numbers 9 and 15 is: 2 The number of mismatching bits for the numbers 32 and 31 is: 6 The number of mismatching bits for the numbers 40 and 40 is: 0 复杂度分析: 程序的时间和空间复杂度均为常数,即 O(1)。 注意:在本教程中,我们已经讨论了三个程序,并且从渐近的角度来看,所有程序的time complexity都是相同的。然而,在这三个程序中,第三个程序在复杂度方面是最好的。这是因为第三个程序中使用的 while 循环只运行 O(setBits) 次,其中 setBits 是两个给定数字的 XOR 值中设置为 1 的位数。通常,XOR 值中的设置为 1 的位数相对较少。因此,在大多数情况下,第三个程序的 while 循环的运行次数甚至会少于 O(8) 次。下一主题Java 中的回文排列字符串 |
Java short 关键字是一种原始数据类型。它用于声明变量。它也可以与方法一起使用。它可以保存一个 16 位有符号二进制补码整数。要点:short 的最小值是 -32,768,最大值是 32,767...
阅读 6 分钟
Java 是开发人员编写代码的首选。它是一种非常流行且成功的编程语言,用于构建应用程序。Java 开发人员的数量日益增加。它主要用于开发 Web 和移动应用程序。要成为...
5 分钟阅读
在 Java 中,由 Enumeration 的 Element 方法抛出,表明枚举中没有更多元素了。由以下方法抛出 - Enumeration 接口的 Element() 方法 NamingEnumeration 接口的 () 方法 StringTokenizer 类的 Element() 方法 Iterator 接口的 () 方法 是一个...
阅读 2 分钟
C++ 支持作用域解析运算符(::),它允许我们解析标识符的歧义调用或引用。与 C++ 不同,Java 不支持作用域解析运算符。Java 使用相同的运算符(::)但名称不同。Java 中的作用域解析运算符...
阅读 3 分钟
在 Java 中,数组是最重要的数据结构,其中包含相同类型的元素。它在连续的内存分配中存储元素。数组有两种类型,即静态数组和动态数组。在本节中,我们将只关注静态数组...
阅读 2 分钟
在许多编程任务中,您可能会遇到需要查找列表之间差异的情况。这可能是在比较记录集或进行数据评估时常见的需求。Java 提供了几种方法来有效地完成此任务。在此...
5 分钟阅读
简介:Java Vector类是一个动态的类似数组的数据结构,允许您存储和处理对象。无论您是在处理小型项目还是大型应用程序,对Vector的组件进行精确排序都可能很有用。在本...
阅读 3 分钟
在 Java 中交换首尾单词和反转中间字符的例子,体现了字符串操作的一种创造性方法,这是编程的一个基本方面。该任务涉及改变字符串中第一个和最后一个单词的位置,同时反转它们之间的字符顺序。示例 1:输入:...
阅读 8 分钟
Euclid-Mullin 序列是一个素数序列,其特点是递归定义。更技术地说,这个序列以数字 2 作为它的第一项。后续项是通过查找满足特定条件的素数来生成的。在这个序列中,...
5 分钟阅读
交换两个变量是编程中的常见任务,通常涉及三个步骤:将一个变量的值存储到临时变量中,将第二个变量的值赋给第一个变量,然后将临时变量的值赋给第二个变量。然而,在某些编程语言中,...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India