classSolution { public: intpivotIndex(vector<int>& nums){ int n = nums.size(); vector<int> left(n, 0); vector<int> right(n, 0); for (int i = 1; i < n; ++i) left[i] = left[i-1] + nums[i-1]; for (int i = n-2; i >= 0; --i) right[i] = right[i+1] + nums[i+1]; for (int i = 0; i < n; ++i) { if (left[i] == right[i]) return i; } return-1; } };
优化:后缀和可以通过 sum - nums[i] - prefixSum[i] 求得
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
classSolution { public: intpivotIndex(vector<int>& nums){ int n = nums.size(); vector<int> prefixSum(n, 0); int sum = nums[0]; for (int i = 1; i < n; ++i) { prefixSum[i] = prefixSum[i-1] + nums[i-1]; sum += nums[i]; } for (int i = 0; i < n; ++i) { if (prefixSum[i] == (sum - nums[i] - prefixSum[i])) return i; } return-1; } };