1 static int wing=[]() 2 { 3 std::ios::sync_with_stdio(false); 4 cin.tie(NULL); 5 return 0; 6 }(); 7 8 class Solution 9 { 10 public: 11 int pivotIndex(vector<int>& nums) 12 { 13 int sz=nums.size(); 14 if(sz==0) 15 return -1; 16 int sum=accumulate(nums.begin(),nums.end(),0); 17 int leftsum=0; 18 for(int res=0;res<sz;res++) 19 { 20 if(leftsum*2+nums[res]==sum) 21 return res; 22 leftsum+=nums[res]; 23 } 24 return -1; 25 } 26 };
思路:先对整个数组进行求和,得到总数sum。然后从头开始遍历数组,并对遍历过的元素进行累加得到一个x,
如果x值乘以2 + 当前位置的值等于sum,则说明当前位置是pivot
也可以求和之后,左加右减,判定左右相等,但是这种方法在指针跑到数组两端时要注意一下。
浙公网安备 33010602011771号