algorithm - 我怎样才能使这个算法更有效率?

标签 algorithm data-structures time-complexity big-o

我有一个算法可以生成一个二维数组,其中包含所有可能值的总和。例如,对于数组 [1,5,8,4,5],二维数组 sums[1][3] 应该返回索引 1- 的和3 在原始数组 (17) 中。我相信就大 O 而言,效率是 O(N2)。有什么办法可以让这个算法更有效率吗?

public static int[][] sum(int[] values){
    int[][] sums = new int[values.length][values.length];
    for(int x = 0; x < values.length; x++){
        int total = 0;
        for(int y = x; y < values.length; y++) {
            total += values[y];
            sums[x][y] = total;
        }
    }
    return sums;
}

最佳答案

您可以使用前缀和数组在 O(n) 时间和空间内解决此问题:

array    = [1, 5, 8, 4, 5]
prefixes = [1, 6,14,18,23]

sums(1,3) = prefixes[3] - prefixes[0] = 18 - 1 = 17

关于algorithm - 我怎样才能使这个算法更有效率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40535792/

相关文章:

c - 哈希表遍历操作

java - LinkedHashMap 与 HashMap 中的删除

algorithm - 遍历树叶节点,无需全树遍历

java - 快乐数字的最佳算法

python - 算法运行时迭代for循环分析

c - 逐节读取文件内容

data-structures - N 元树数据结构

database - X-Y Fast Trie 在实际应用中的应用

algorithm - 在随机文本中寻找语言模式

ruby - 树到数组算法(Ruby)