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.
给定一个整数数组nums,编写一个方法,找到数组中的‘pivot’索引
pivot索引指的是索引左侧的元素和等于索引右侧的元素和
如果这样的索引不存在,返回-1,如果有多个这样的索引,返回最左端的pivot索引
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]
.
Solutions:
Python
'''
定义元素左边的和left与右边的和right,right起始为nums总和
遍历数组,用right减去遍历的num,
如果左边的和等于右边的和,返回元素索引,否则左边和加上num,右边和减去num
'''
class Solution(object):
def pivotIndex(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
left = 0
right = sum(nums) #定义nums元素的右边的和right为nums总的和
for index,num in enumerate(nums):
right -= num #这个位置需要注意一下,index从第0个元素开始,两边的和是不包括index元素的,所以right进入循环就先减num
if left == right:
return index
left += num
return -1
C++
class Solution {
public:
int pivotIndex(vector<int>& nums) {
int right = accumulate(nums.begin(),nums.end(),0);
int left = 0;
int length = nums.size();
for (int i = 0;i<length;i++){
right -= nums[i];
if (left == right){
return i;
}
left += nums[i];
}
return -1;
}
};