目录
-
- [1. 前缀和思想是利用前面的计算减少后面不必要的计算.](#1. 前缀和思想是利用前面的计算减少后面不必要的计算.)
好的, 我们来分享一道关于前缀和算法的简单练习题 -> 寻找数组的中心下标
这道题很显然比较直接的方式是去用枚举法挨个试, 但是这个过程中会有大量重复计算, 会自然的想到前缀和算法.
1. 前缀和思想是利用前面的计算减少后面不必要的计算.
这个题目的思路非常简单和清晰, 感觉是属于十分简单的那一种题目了, 在思路和编码上都没有什么需要注意的地方. 下面简单说一下思路和给一个参考代码吧:
我们从中心下标的定义可以知道, 出中心下标的元素之外, 该元素的左边的 [前缀和 ] 等于该元素右边的 [后缀和 ]. 因此, 我们可以预先处理两个数组, 一个表示 [前缀和 ], 另一个表示 [后缀和 ].
然后, 我们可以用一个for
循环枚举可能出现的中心下表, 判断每一个位置的前缀和以及后缀和, 如果二者相等, 就返回当前下标.
我们可以用下面图片来解释一下:
参考代码是:
cpp
class Solution {
public:
int pivotIndex(vector<int>& nums) {
int n = nums.size(); vector<int> v(n+1, 0);
// 1. 制造前缀和数组
for(int i = 0; i < n; i++) v[i+1] = v[i] + nums[i];
// 2. 挨个测试
for(int i = 0; i < n; i++)
if(v[i] == v[n] - v[i+1]) return i;
return -1;
}
};
⇒ 一键返回: 前缀和专题目录
EOF.