#include <iostream>
#include<vector>
#include<numeric>
using namespace std;
//思路1.左侧和==右侧和
class solution
{
public:
int pivotindex(vector<int>& nums)
{
//先计算出整个容器的总和sum
int sum = accumulate(nums.begin(), nums.end(), 0);
//遍历整个容器
//对于每个索引,计算左侧元素和leftsum和右侧元素和rightsum
int leftsum = 0;
for (int i = 0; i < nums.size(); i++)
{
//如果leftsum等于rightsum 则说明当前索引i就是中心索引
//rightsum=总和-左侧元素总和-当前元素
if (leftsum == sum - leftsum - nums[i])
return i;
leftsum += nums[i];
}
//如果遍历完整个容器都没找到中心索引则返回-1
return -1;
}
};
//思路2.2 * 左侧和+当前索引值=总和
class Solution
{
public:
int pivotIndex(vector<int>& nums)
{
//先计算出整个容器的总和sum
int sum = accumulate(nums.begin(), nums.end(), 0);
//遍历整个容器 对于每个索引,计算左侧元素和leftsum
int leftsum = 0;
for (int i = 0; i < nums.size(); i++)
{
//2 * 左侧和+当前索引值=总和
if (leftsum * 2 + nums[i] == sum)
return i;
leftsum += nums[i];
}
//如果遍历完整个容器都没找到中心索引则返回-1
return -1;
}
};
int main()
{
vector<int> v{1,7,3,6,5,6};
Solution a;
auto b=a.pivotIndex(v);
cout << b; // 3
return 0;
}