题目详情
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.题目的意思要找出输入数组的“枢纽”点。这个“枢纽”的定义就是,这个元素所有左边的元素的加和刚好等于它所有右边元素的加和,并且我们返回这个枢纽点的位置。如果不存在这样的“枢纽”,则返回-1.如果有多个这样的枢纽,则返回最左侧的枢纽点。
Example 1:
Input:
nums = [1, 7, 3, 6, 5, 6]
Output: 3
Explanation:
nums[3]左边的元素和为11,刚好等于nums[3]右边的元素和。
Example 2:
Input:
nums = [1, 2, 3]
Output: -1
Explanation:
没有满足“枢纽”定义的元素。所以返回-1.
想法
- 有一种临界情况需要考虑,就是元素nums[0]作为枢纽点的情况,这种情况下,nums[0]的所有的右边的元素加和应该为0,则nums[0]为数组的枢纽点。
- 考虑了这个特殊情况就没有什么特别的了。我们先遍历一趟获得数组元素值的和sum。
- 在第二趟遍历中,检查当前元素左边所有元素的加和,是否等于sum减去当前元素的值,如果满足,则当前点为枢纽点,返回当前元素的位置。
解法
public int pivotIndex(int[] nums) {
int length = nums.length;
if(length == 0 || length ==1)return -1;
int sum = 0;
for(int num : nums)sum += num;
if(sum-nums[0] == 0)return 0;
int left = 0;
for(int i=1;i<length;i++){
left += nums[i-1];
if(sum - left - nums[i] == left){
return i;
}
}
return -1;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。