# 寻找中心索引

# 1.1 题目

题目

# 1.2 解题思路

这道题目还是挺有意思的,第一反应的思路是两侧同时相加,一直加到两侧相等,但是这种思路写出来的代码思路会比较混乱,而且 O(n)的时间复杂度大概率会超时。
既然目标是两侧相等,那么我们可以考虑先求出数组的和,然后再通过总和分别求出左侧和、右侧和。不过这就引出了一个新的问题,怎么样以 O・(n) 的时间复杂度求出两侧和?
左侧和很简单,就是逐个相加。右侧和呢?就是总和 - 左侧和 - 当前元素。到这里正道题目就完成了 90%,不过还有一个地方需要注意,要求返回最靠左边的索引,故需要在计算出左侧和之前进行判定。至此,此题得解。

# 1.3 代码实现

class Solution {
public:
    int pivotIndex(vector<int>& nums) {
        int sum = 0;
        
        for (int i = 0; i < nums.size()/2; i++){
            sum += nums[i];
        }
        int r_sum = 0, l_sum = 0;
        for (int i = 0; i < nums.size(); i++){
            r_sum = sum - l_sum - nums[i];
            if (r_sum == l_sum){
                return i;
            }
            l_sum += nums[i];
        }
    }
};

大道五十,天衍四十九,人遁其一!