题目地址:
https://www.lintcode.com/problem/balanced-sales-array/description
给定一个数组 A A A,求某个下标 k k k使得 ∑ i = 1 k − 1 A [ i ] = ∑ i = k + 1 l A − 1 A [ i ] \sum_{i=1}^{k-1}A[i]=\sum_{i=k+1}^{l_A-1}A[i] i=1∑k−1A[i]=i=k+1∑lA−1A[i]题目保证解存在。
思路是前缀和,可以降低时间复杂度。代码如下:
public class Solution {
/**
* @param sales: a integer array
* @return: return a Integer
*/
public int BalancedSalesArray(int[] sales) {
// write your code here
int[] preSum = new int[sales.length + 1];
for (int i = 0; i < sales.length; i++) {
preSum[i + 1] = preSum[i] + sales[i];
}
for (int i = 0; i < sales.length; i++) {
if (preSum[i] == preSum[sales.length] - preSum[i + 1]) {
return i;
}
}
return -1;
}
}
时空复杂度 O ( l A ) O(l_A) O(lA)。