Minimum Non-Zero Product of the Array Elements in Java2025 年 3 月 28 日 | 阅读 4 分钟 假设我们有一个正整数 p,我们希望对包含 1 到 2^p - 1 的二进制数字的数组 nums 执行操作。在对数组元素执行任意次数的特定操作后,目标是找出数组元素的最小非零积。为此,从 nums 中选择任意两个元素 x 和 y,并在它们之间交换相应的位(即,x 中的某个位与 y 中的某个位进行交换)。 目标是以最小化数组中每个整数的乘积,然后以 (10^9 + 7) 取模来返回最小乘积。只需要在取模之前计算乘积。 示例 1 输入 int p = 1 输出 p 的最小非零积为:1 解释 给定 p = 1,则 2^1 -1=1,所以 base_valA 为 1。幂值 pow_valB 为 (2^1 - 2)^{2^0 - 1} \mod 10^9 + 7 = 0^{0} \mod 10^9 + 7 = 1。结果为 1 * 1 % 10^9 + 7 = 1。 示例 2 输入 int p = 4 输出 p 的最小非零积为:62748517 解释 给定 p = 4,2^4 -1 =15,所以 base_valA 为 15。幂值 pow_valB 为 (2^4 - 2)^{2^3 - 1} \mod 10^9 + 7 = 14^7 \mod 10^9 + 7 = 418211942。结果为 15 * 418211942 % 10^9 + 7 = 62748517。 示例 3 输入 int p = 2 输出 p 的最小非零积为:1 解释 给定 p = 2,则 2^2 - 1 = 3,所以 base_valA 为 3。幂值 pow_valB 为 (2^2 - 2)^{2^1 - 1} \mod 10^9 + 7 = 2^1 \mod 10^9 + 7 = 2。结果为 3 * 2 % 10^9 + 7 = 6。 我们必须考虑二进制整数的特性以及位交换的影响。考虑到我们处理的值范围从 1 到 2^p - 1,我们可以推断出,当转换为 二进制 时,这些数字将类似于从 1 到 111...111(p-1 个 1)的系列。 由于任何一组数字的乘积在数字相等或尽可能接近时最小,如果我们执行操作以最小化乘积,则应努力使数字尽可能接近。这表明我们应该努力增加最小数字的值并减小最大数字的值。但由于它是 1 且没有零可以替换它,所以最小的数字是不可变的。 朴素方法算法步骤 1:在长时间计算过程中,为了防止缓冲区溢出,将 Mod 设置为 10^9 + 7 (1,000,000,007)。 步骤 2:计算 2^p -1 以找到基值 a。这是通过使用表达式 (1<<p)−1 高效计算 2^p 来实现的,然后应用模 Mod 以保持可管理性。 步骤 3:将结果 res 初始化为 1,用于基数 b、指数 e 和模数 m。 步骤 4:如果 e 的最低有效位 (e&1) 为 1,则将 res 乘以 b 模 m。 步骤 5:将基数 b 除以二,将其平方模 m,并将 e 向右移动一位。 步骤 6:返回 res 作为 b^e mod m 的结果。 步骤 7:最终乘积通过将 base_valA 乘以 pow_valB 并将结果模 Mod 来计算。 步骤 8:如果最终结果已转换为整数,则返回它。 实现文件名:MinimumNonZero.java 输出 The Minimum Non-Zero Product for the p is given by: 1 复杂度分析 上述代码的时间复杂度为 O(p),空间复杂度为 O(1)。 |
在 Java 中,Snippet 是 jdk.jshell 模块和包中的一个类。它是在 Java 9 中引入的。它用于表示传递给 JShell.eval() 的 Java 源代码片段。它由 JShell 实例创建,因此...
阅读1分钟
Java 9 Stream API 改进 在 Java 9 中,Stream API 得到了改进,并在 Stream 接口中添加了新方法。这些方法如下表所示。修饰符和类型方法描述 default Stream<T> takeWhile(Predicate<? super T> predicate) 如果此流已排序,则返回一个由最长前缀元素组成的流……
阅读 3 分钟
? 计算两个日期之间的时间差是编程中的常见任务。在 Java 中,可以使用内置的 Date 和 Calendar 类,或者更现代的 LocalDate 和 LocalTime 类来完成。在本节中,我们将探讨如何使用...
阅读 4 分钟
CAPTCHA(全自动区分计算机和人类的图灵测试)是一种广泛使用的安全机制,用于区分人类用户和自动化机器人。它通过扭曲的文本或图像形式向用户提出挑战,用户必须正确解读。在……
阅读 4 分钟
Java 作为一种面向对象的编程语言,为处理对象及其交互提供了强大的支持。处理对象的一个重要方面是能够将它们转换为或强制转换为不同的类型或类。Java 提供了类型转换对象的机制,允许开发人员更改...
阅读 6 分钟
? Java 是一种通用且广泛使用的编程语言,提供了多种数据结构来管理和操作数据集合。最常用的数据结构之一是 ArrayList。ArrayList 是 Java 集合框架的一部分,并提供动态大小调整功能,使其...
阅读 6 分钟
Java 的 'ByteBuffer' 是一个固定数量字节的容器。'ByteBuffer' 的大小是它可以容纳的字节数,并且在创建 'ByteBuffer' 时确定。我们可以使用...使用特定字节大小的 'ByteBuffer'...
5 分钟阅读
在 Java 中,匿名函数,也称为 lambda 表达式。它是在 Java 8 中引入的,作为提供更简洁易读代码的一种方式。它们允许我们在单行代码中定义一个函数,而无需显式定义类或接口。什么...
阅读 4 分钟
数独是一款流行的益智游戏,涉及将一个 9x9 的网格填入数字,以便每行、每列和每个 3x3 的子网格都包含 1 到 9 的所有数字。以编程方式解决数独可能具有挑战性,但多线程可以显著提高性能...
14 分钟阅读
?在 Java 中,转换运算符用于将一个数据类型的值转换为另一个数据类型。它用括号运算符“()”表示。语法:DataType variableName = (DataType) value; 在方括号内,转换运算符用于将值更改为选定的数据类型。这些...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India