算法要求
给你一个整数数组 nums ,请计算数组的 中心下标 。
数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。
如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。
如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。
C++实现
class Solution {
public:
int pivotIndex(vector<int> &nums) {
switch (nums.size()) {
case 0:
return -1;
case 1:
return 0;
default:
{
if(!accumulate(nums.begin()+1, nums.end(),0))
return 0;
for(int step=1;step<nums.size()-1;step++)
{
if(accumulate(nums.begin(),nums.begin()+step,0)==accumulate(nums.begin()+step+1, nums.end(),0))
return step;
}
if(!accumulate(nums.begin(),nums.end()-1,0))
return nums.size()-1;
return -1;
}
}
}
};
测试
int main() {
vector<int> a0={-1};
vector<int> a1={1,2};
vector<int> a2={1,-1,1};
vector<int> a3={1,7,3,6,5,6};
vector<int> a4={1,2,3};
vector<int> a5={2,1,-1};
vector<int> a6={-1,-1,0,1,1,0};
vector<int> nums;
Solution solution;
cout<<solution.pivotIndex(nums)<<endl;//-1
cout<<solution.pivotIndex(a0)<<endl;//0
cout<<solution.pivotIndex(a1)<<endl;//-1
cout<<solution.pivotIndex(a2)<<endl;//0
cout<<solution.pivotIndex(a3)<<endl;//3
cout<<solution.pivotIndex(a4)<<endl;//-1
cout<<solution.pivotIndex(a5)<<endl;//0
cout<<solution.pivotIndex(a6)<<endl;//5
}
记录力扣第一题