Java 中的 GP 序列问题数量2024年9月10日 | 阅读 6 分钟 Java 中的 GP 序列问题涉及确定给定数字集中有效几何级数序列的数量。几何级数由公比定义,在各个领域都至关重要。在本教程中,我们将找到长度为 3 的 GP 序列的计数。 示例 1 输入: inputArray[] = {1, 2, 6, 2, 3, 6, 9, 18, 3, 9}, commonRatio = 3 输出: 公比为 3 的长度为 3 的 GP 子序列计数为:6 解释: 程序计算出在指定数组中有 6 个公比为 3 的长度为 3 的几何级数 (GP) 子序列。 示例 2 输入: inputArray[] = {1, 3, 9, 27, 81}, commonRatio = 3 输出: 公比为 3 的长度为 3 的 GP 子序列计数为:3 解释: GP 子序列为 {1, 3, 9}, {3, 9, 27}, 和 {9, 27, 81}。 方法:朴素方法在朴素方法中,算法遍历数组中的每个元素三元组,检查它们是否构成一个几何级数子序列。三重嵌套迭代导致三次时间复杂度,由于其详尽的性质,对于较大的输入规模效率较低。 算法步骤 1: 初始化两个 HashMap:创建左侧和右侧 HashMap,以计数数组中当前元素左侧和右侧的每个元素的出现次数。 步骤 2: 填充右侧 HashMap:遍历数组,并用每个元素的计数填充右侧 HashMap。 步骤 3: 通过遍历每个数组元素来计算 GP 子序列。 步骤 4: 对于当前元素 array[i] 步骤 4.1: 如果 array[i] 能被比率整除,则使用左侧 HashMap 计算 countLeft。 步骤 4.2: 减少右侧 HashMap 中 array[i] 的计数。 步骤 4.3: 确定 right HashMap 中 array[i] * ratio 的 countRight。 步骤 4.4: 将 countLeft 和 countRight 相乘以更新总子序列计数(结果)。 步骤 4.5: 增加左侧 HashMap 中 array[i] 的计数。 步骤 6: 返回总计数:遍历数组后,返回子序列的总计数(结果)。 实施文件名: MyGPProgram.java 输出 The count of GP subsequences with length 3 and common ratio 3 is: 6 时间复杂度: 时间复杂度为 O(n),因为它利用了两个遍历输入数组的循环,并且每个循环内的操作是常数时间的,从而实现了线性的整体时间复杂度。 辅助空间: 辅助空间复杂度为 O(n),因为代码使用了两个 HashMap 来维护元素的计数,并且这些 HashMap 所需的空间与输入数组的大小成线性关系。 方法:计算几何级数 (G.P.) 子序列该代码采用一种计算几何级数 (G.P.) 子序列的方法,利用哈希映射来跟踪元素出现次数,并根据给定的比率有效地计算计数。此外,代码还利用二项式系数来计算组合,从而提高了 G.P. 子序列计数的准确性。 算法步骤 1: 在 binomialCoeff 中使用动态规划计算二项式系数 (n choose k)。 步骤 2: 在 countGPSubsequences 中,使用 left 和 right HashMaps 来跟踪当前元素左侧和右侧元素的计数。 步骤 3: 如果比率为 1,则使用二项式系数为每个元素的计数计算 GP 子序列。 步骤 4: 如果不为 1,则遍历数组
步骤 5: 定义数组、大小和公比。调用 countGPSubsequences 并打印结果。 实施文件名: GPSequence.java 输出 Count of GP subsequences with commonRatio 3: 6 时间复杂度: countGPSubsequences 中的外部循环遍历所有数组元素一次,因此时间复杂度为 O(n),其中 n 是输入数组的大小。 辅助空间: 空间复杂度受两个哈希映射(左侧和右侧)的影响。在最坏的情况下,当所有元素都唯一时,空间复杂度为 O(n),因为每个元素可能在两个哈希映射中都有一个条目。 下一个主题Switch 的模式匹配 |
Thread 类提供了用于创建和控制线程的构造函数和函数。它作为 Object 类的子类,还实现了 Runnable 接口。已弃用的方法不再被认为重要,不应使用,因为它们可能会在将来的版本中从类中删除...
阅读 6 分钟
在本节中,我们将学习什么是技术数以及如何通过 Java 程序找到技术数。技术数 如果一个数字有偶数位,并且可以精确地分割成...,则该数字称为技术数。
阅读 3 分钟
在 Java 8 中,DoubleBinaryOperator 接口应运而生。它返回一个双精度值作为对它表示的两个双精度值执行操作的最终结果。它可以作为方法引用或 lambda 表达式使用,因为它是一个函数式...
阅读 3 分钟
这是 Google、Amazon、TCS、Accenture 等顶级 IT 公司面试中经常提出的问题。通过解决问题,人们希望检查面试者的逻辑能力、批判性思维和解决问题的能力。因此,在本节中,我们将...
阅读 4 分钟
由三个不同直径的圆盘和一对钉子组成的著名数学谜题是汉诺塔。该谜题的目标是在遵守以下规则的情况下,在钉子之间移动每个圆盘:一次只能移动一个圆盘...
阅读 4 分钟
Giuga 数是一个合数 N,它具有一个独特的属性。该属性指出,对于 N 的每个素数因子 p,N 除以 p 减 1((N/p) - 1)也必须能被 p 整除。如果一个数 N 满足这个条件...
5 分钟阅读
在编程中,打印不同形状和类型的星形图案可以是一个有趣的练习。打印此类图案的实践可以增强对嵌套循环的理解。因此,在本节中,我们将了解如何打印空心矩形或正方形星形图案……
7 分钟阅读
什么是 Keystore?Keystore 是 Java 中的一个文件,它包含用于安全可靠地识别和验证用户、设备和服务的加密密钥和证书。Keystore 可以使用随附的 keytool 命令行软件生成和控制...
阅读 6 分钟
? Java 是当今最流行的编程语言之一,它提供了广泛的库和框架来帮助开发人员构建 Web 应用程序。其中一个框架是 Jersey,它是一个强大的开源框架,用于在...中构建 RESTful Web 服务。
7 分钟阅读
编程中处理链表时的一个常见问题是确定两个链表是否相交。如果相交,则找到链表相交的节点。这种情况发生在两个链表在末尾共享一组公共节点,形成一个 Y 形结构时...。
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India