Java 中计数 OR 对2024年9月10日 | 阅读 6 分钟 给定一个包含非负数的数组。另外,给定一个数字 K。我们的任务是计算给定数组中满足以下条件的数对的数量:数对中元素的 OR 运算结果大于 K。 示例 1 输入 int inArr1[] = {1, 3, 7, 9, 15, 20, 25}, K = 15 输出 11 解释 OR 运算结果大于 15 的数对是:(15, 20), (15, 25), (1, 20), (3, 20), (7, 20), (9, 20), (25, 20), (1, 25), (3, 25), (7, 25), (9, 25)。这些数对的数量是 11。因此输出是 11。 示例 2 输入 int inArr1[] = {0, 1, 5, 8, 10, 19, 15, 25, 30, 40, 45}, K = 35 输出 19 解释 OR 运算结果大于 35 的数对是:(0, 40), (1, 40), (5, 40), (8, 40), (10, 40), (19, 40), (15, 40), (25, 40), (30, 40), (45, 40), (0, 45), (1, 45), (5, 45), (8, 45), (10, 45), (19, 45), (15, 45), (25, 45), (30, 45)。这些数对的数量是 19。因此输出是 19。 简单方法简单的方法是找到所有的数对,然后对数对中的元素进行 OR 运算。OR 值大于 K 的数对将使计数增加 1。计数的最终值就是我们的答案。 算法如下: 步骤 1:创建一个变量 'cntORPairs' 用于记录 OR 值大于 K 的数对数量。将其赋值为 0。 步骤 2:运行一个从 0 到 'len' 的循环(假设迭代器为 'j')。 步骤 3:运行一个嵌套循环,从 'j' + 1 到 'len'(假设迭代器为 'k')。 步骤 4:检查 'inputArr[j]' 和 'inputArr[k]' 的 OR 值是否大于 'K'。 步骤 5:将 'cntORPairs' 增加 1。 步骤 6:最后,返回 'cntORPairs'。 文件名:CountOrPair.java 输出 For the input array: 1 3 7 9 15 20 25 The total count of OR pairs whose value is greater than 15 is: 11 For the input array: 0 1 5 8 10 19 15 25 30 40 45 The total count of OR pairs whose value is greater than 35 is: 19 复杂度分析:程序使用嵌套 for 循环查找所有数对。总共有 (N * (N - 1)) / 2 个数对。因此,程序的整体时间复杂度为 O(N2),其中 'N' 是输入数组的大小。此外,程序不使用额外的空间,因此空间复杂度为 O(1)。 数学方法思路是找出大于 'K' 的元素的数量。大于 'K' 的元素可以与输入数组 inputArr[] 中的其他所有元素组成数对。这是因为,如果一个数字大于 'K',那么它与任何元素的 OR 运算结果都将大于 'K'。 让我们举一个例子以更好地理解。 设数组为 inputArr[] : {15, 1, 2, 3} 设 'K' 为:7 'K' 的二进制表示是:0111 'inputArr[0]' 即 15 的二进制表示是:1111 'inputArr[1]' 即 1 的二进制表示是:0001 'inputArr[0]' 和 'inputArr[1]' 的 OR 值为:15 | 1 = 15,大于 7。OR 值大于 7 是因为第一个元素 15 大于 7。如果我们取两个小于 7 的数,它们的 OR 值永远不会大于 7。例如:inputArr[2] | inputArr[3] = 2 | 3 得到 3,小于 7。 请看下面的算法。 步骤 1:创建一个变量 'cntORPairs' 用于记录数对的数量。将其赋值为 0。 步骤 2:创建一个变量(例如 'cntK')用于记录大于 K 的元素数量,并初始化为 0。 步骤 3:运行一个从 0 到 'N' 的循环(假设循环变量为 'j')。 步骤 4:检查 'inputArr[i]' 是否大于 'K'。
步骤 5:最后,返回 'cntORPairs'。 上述步骤的实现如下。 文件名:CountOrPair1.java 输出 For the input array: 1 3 7 9 15 20 25 The total count of OR pairs whose value is greater than 15 is: 11 For the input array: 0 1 5 8 10 19 15 25 30 40 45 The total count of OR pairs whose value is greater than 35 is: 19 复杂度分析:该程序使用单个循环,因此时间复杂度为 O(N),其中 N 是输入数组的总元素数。程序空间复杂度为常数,即 O(1)。 注意:在许多情况下,上述方法可能会给出错误的结果。因此,为了使其正常工作,建议使用 K 的值为 2p - 1。即 1, 3, 7, 15, 31… 等。我们看到在上面的例子中输出是正确的(尽管 K 不是 2p - 1 的形式)。但是,不能保证它对任何 K 值都有效。因此,为了安全起见,请使用 K 的值为 2p - 1。 |
? Java 是一种因其强大和适应性而被广泛应用于许多不同应用程序的计算机语言。但与其他任何编程语言一样,在编码过程中也会出现错误。Java 程序员必须熟练掌握有效清除错误的方法,以确保他们的...
阅读 4 分钟
在本节中,我们将理解如何实现鱼形模式的逻辑。鱼形模式是最复杂的模式之一。为了实现鱼形模式的逻辑或代码,我们从用户那里获取输入 N,然后...
阅读 2 分钟
在 Java 中,图是一种存储一定数量数据的结构。图的概念是从数学借鉴而来,以满足计算机科学领域的需求。它代表连接多个点的网络。在...
11 分钟阅读
在本节中,我们将讨论数组中的局部最小值是什么以及如何通过 Java 程序找到局部最小值。数组中的局部最小值是什么?如果数组元素小于其相邻元素,则称该元素为数组的局部最小值...
阅读 3 分钟
在本节中,我们将学习如何创建一个 Java 程序来查找三个数字中的最大值。此外,我们还将学习如何使用三元运算符在 Java 中查找三个数字中的最大值。使用三元运算符 在继续学习程序之前,让我们……
阅读 3 分钟
Java 中的 & 运算符是什么?在 Java 编程语言中,运算符在操作和组合值方面起着至关重要的作用。其中一个运算符是“&”运算符,它被称为按位 AND 运算符。它允许开发人员对整型执行按位操作...
阅读 3 分钟
类文件是 .java 文件的编译形式。当我们编译 Java 源代码(.java 文件)时,它会生成一个 .class 文件。如果一个 Java 程序有多个类,在这种情况下,编译源文件后,我们将得到相同的...
阅读 3 分钟
? 在现代 Java 开发中,处理 JSON 数据是一项典型任务。为了有效处理数据,必须能够将 JSON 字符串转换为 Java 对象。为了完成这种转换,我们将在此指南中研究三个流行的开源库:Gson、JSON-Simple 和 Jackson。我们将...
阅读 6 分钟
构造函数重载 在 Java 中,我们可以像方法一样重载构造函数。构造函数重载可以定义为拥有多个具有不同参数的构造函数,以便每个构造函数都可以执行不同的任务。要了解更多关于 Java 中的构造函数重载的信息,请参阅构造函数重载的特点 相同的……
7 分钟阅读
通常,我们需要生成一个安全密码以用于安全目的。有几种方法可以生成强密码。在本节中,我们将理解如何生成一个至少包含两个小写字符、两个大写字符、两个数字的强密码...
阅读 8 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India