题目链接:
https://leetcode.cn/problems/find-pivot-index/
这道题目我们可以使用暴力解法,就一个下标前数组之和,再求一个下标后数组之和,时间复杂度达到n方,我们来写一下:
int pivotIndex(vector<int>& nums) {
//遍历数组每个元素
for (int i = 0; i < nums.size(); i++)
{
//求该下标的前缀之和
int sum1 = 0;
int sum2 = 0;
for (int j = 0; j < i; j++)
{
sum1 += nums[j];
}
//求该下标后缀之和
for (int k = i + 1;k < nums.size(); k++)
{
sum2 = sum2 + nums[k];
}
if (sum1 == sum2)return i;
}
return -1;
}
也可以使用前缀和:先创建两个数组,一个数组记录下标的前缀之和,一个数组记录下标的后缀之和,前缀之和从前面开始,后缀之和从后面开始。
完成之后我们再进行遍历比较相等,前缀和等于后缀和,我们返回。否则返回-1;
int pivotIndex(vector<int>& nums) {
vector<int>num1(nums.size());
vector<int>num2(nums.size());
num1[0]=0;
num2[nums.size()-1]=0;
for(int i=1;i<nums.size();i++)
{
num1[i]=num1[i-1]+nums[i-1];
}
for(int i=nums.size()-2;i>=0;i--)
{
num2[i]=num2[i+1]+nums[i+1];
}
for(int i=0;i<nums.size();i++)
if(num1[i]==num2[i])
return i;
return -1;
}