# 寻找中心索引
# 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]; | |
} | |
} | |
}; |
大道五十,天衍四十九,人遁其一!