📜  数组中范围乘积的Java程序(1)

📅  最后修改于: 2023-12-03 14:54:59.908000             🧑  作者: Mango

数组中范围乘积的Java程序

在编程中,经常会遇到需要计算数组中某个范围内元素的乘积的情况。本文将向程序员介绍一个用Java编写的计算数组中范围乘积的程序。

问题描述

给定一个整数数组 nums 和两个整数 leftright,我们需要计算数组中所有范围在 [left, right] 内的元素的乘积。

程序实现

下面是一个用Java编写的计算数组中范围乘积的函数。

public class RangeProduct {
    public static int rangeProduct(int[] nums, int left, int right) {
        int n = nums.length;
        int[] prefixProduct = new int[n + 1]; // 存储前缀乘积
        int mod = 1000000007; // 可选的用于取模的常数

        prefixProduct[0] = 1;
        for (int i = 1; i <= n; i++) {
            prefixProduct[i] = (prefixProduct[i - 1] * nums[i - 1]) % mod; // 计算前缀乘积
        }

        int ans = 0;
        for (int i = left; i <= right; i++) {
            for (int j = i; j <= right; j++) {
                int product = (prefixProduct[j + 1] / prefixProduct[i]) % mod; // 计算范围乘积
                ans = (ans + product) % mod;
            }
        }

        return ans;
    }

    public static void main(String[] args) {
        int[] nums = {1, 2, 3, 4, 5};
        int left = 1;
        int right = 3;
        int result = rangeProduct(nums, left, right);
        System.out.println("范围乘积为:" + result);
    }
}

代码解析

  1. 首先,我们创建了一个名为 RangeProduct 的类,其中包含 rangeProduct 函数和 main 函数。
  2. rangeProduct 函数中,我们首先创建一个长度为 n+1 的数组 prefixProduct,用于存储计算过程中的前缀乘积。
  3. 然后,我们遍历原始数组 nums,计算并存储每个位置的前缀乘积。
  4. 接下来,我们使用两层循环遍历范围内的元素,并计算范围乘积。注意,为了避免乘积中间结果过大导致溢出,我们每次计算乘积时都进行取模操作。
  5. 最后,我们返回结果 ans,即范围乘积的总和。
  6. main 函数中,我们通过调用 rangeProduct 函数计算数组中范围乘积的结果,并将其打印输出。

结论

这个 Java 程序可以有效计算给定数组中指定范围内元素的乘积,并返回结果。程序设计合理,附带注释,易于理解和修改。可以根据实际需求,使用该代码作为基础进行扩展和优化。