报告整数乘积的算法

标签 algorithm

披露 该问题基于 CS 类(class)中的一个问题。不过,希望对其进行扩展。

最初的问题很简单,给定一组 n 个整数,报告 n-1 个整数的 n 个乘积(每次缺少一个不同的 n_i)。它是在线性时间内运行。

例如,一组{1, 2, 3, 4}会报告2 * 3 * 41 * 3 * 41 * 2 * 41 * 2 * 3

(我能想到的)最简单的解决方案是简单地遍历所有 n 整数并计算它们的乘积 (1 * 2 * 3 * 4 ).然后第二次遍历它们,并使用除法,将总乘积除以每个整数。每次报告解决方案(24/1, 24/2, 24/3, 24/4)。

以上代码在线性时间内工作和运行。教授虽然建议我们也想出一种不用 split 的方法。仍然没有空间限制,只有线性时间限制。我已经考虑过了,但我还是一片空白。有什么建议吗?

最佳答案

您可以先计算一个包含所有领先产品的数组——线性时间:

1 
1 * 2
1 * 2 * 3
1 * 2 * 3 * 4

然后是尾随的秒数——这也是线性时间:

            4
        3 * 4
    2 * 3 * 4
1 * 2 * 3 * 4

任何答案都可以直接找到,或者计算为第一个列表中的一个项目和第二个列表中的一个项目的乘积:

              (2 * 3 * 4)
(1)         *     (3 * 4)
(1 * 2)     *         (4)
(1 * 2 * 3)

关于报告整数乘积的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26129754/

相关文章:

algorithm - CLRS :33. 1-4 :Show how to determine in O(n*n*lg n) time whether any three points in a set of n points are colinear?

algorithm - (Set of) List of sets (Cartesian product(s)) 来自对应于列表集的图

c - 带约束的迷宫求解

java - 在 ArrayList 和 LinkedList 上使用归并排序 : Java

algorithm - 多谓词的数据结构和搜索算法

algorithm - O(1) 和 O(2) 在算法分析中有什么区别?

c - 三度树的递归和非递归遍历

java - 欧拉计划问题 18 无法到达最后一个元素

c - 插入排序算法

算法:根据周数获取下一年日期工作类次类型