724.寻找数组的中心下标前缀和
题目链接:
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;}