作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个算法可以生成一个二维数组,其中包含所有可能值的总和。例如,对于数组 [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/
我是一名优秀的程序员,十分优秀!