知识点

前缀和后缀和,模拟

思路

设数组长度为n

分别维护从左往右的前缀和l[i]=sum(nums[0i])以及从右往左的后缀和l[i]=sum(nums[in-1]),再从左往右遍历一次数组,若出现l[i-1]=r[i+1](等效于l[i]==r[i])则直接返回i

否则返回-1

代码c++

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int pivotIndex(vector<int>& nums) {
        // write code here
        int ans=-1;
        int n=nums.size();
        int l[10005],r[10005];
        l[0]=nums[0];r[n-1]=nums[n-1];
        for(int i=1;i<n;i++)
        {
            l[i]=l[i-1]+nums[i];
        }
        for(int i=n-2;i>=0;i--)
        {
            r[i]=r[i+1]+nums[i];
        }
        for(int i=0;i<n;i++)
        {   cout<<l[i]<<"  "<<r[i]<<endl;
            if(l[i-1]==r[i+1])return i;
        }
        return ans;
    }
};