Description
Given an array of integers nums, write a method that returns the “pivot” index of this array.
We define the pivot index as the index where the sum of the numbers to the left of the index is equal to the sum of the numbers to the right of the index.
If no such index exists, we should return -1. If there are multiple pivot indexes, you should return the left-most pivot index.
Example 1:
Input:
nums = [1, 7, 3, 6, 5, 6]
Output: 3
Explanation:
The sum of the numbers to the left of index 3 (nums[3] = 6) is equal to the sum of numbers to the right of index 3.
Also, 3 is the first index where this occurs.
Example 2:
Input:
nums = [1, 2, 3]
Output: -1
Explanation:
There is no index that satisfies the conditions in the problem statement.
Note:
- The length of nums will be in the range [0, 10000].
- Each element nums[i] will be an integer in the range [-1000, 1000].
分析
题目的意思是:给出一个数组,返回pivot的索引,pivot定义为以pivot为分割点,左右两边的值求和相等。
- 先对数组进行求和,然后我们遍历一遍,对每个遍历的值累加,当累加到是总和的一半的时候,判断是否是pivot,是的话就返回;不是的话就继续遍历。
C++实现
class Solution {
public:
int pivotIndex(vector<int>& nums) {
int sum=accumulate(nums.begin(),nums.end(),0);
int curSum=0;
int n=nums.size();
for(int i=0;i<n;i++){
if(sum-nums[i]==curSum*2) return i;
curSum+=nums[i];
}
return -1;
}
};
Python实现
这个需要用遍历的方式实现,如果一开始使用二分法实现,那就错了。
class Solution:
def pivotIndex(self, nums: List[int]) -> int:
total = sum(nums)
cur = 0
for i in range(len(nums)):
if cur*2+nums[i]==total:
return i
cur +=nums[i]
return -1