0
点赞
收藏
分享

微信扫一扫

724. Find Pivot Index*

724. Find Pivot Index*

​​https://leetcode.com/problems/find-pivot-index/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]​​.

解题思路

首先求出整个数组的和 ​​sum​​​, 然后依次遍历每一个索引 ​​i​​​, 判断左边的和 ​​leftsum​​​ 是否等于 ​​sum - nums[i] - leftsum​​​ (即右边的和, 注意不包括 ​​nums[i]​​​), 如果不相等, 那么 ​​leftsum += nums[i]​​​.
主要注意下面这种情况:

nums = [1, -1, 1]
index = 0

对于 ​​nums[0]​​ 左边没有值, 那么就认为是左边的和为 0.

C++ 实现 1

class Solution {
public:
int pivotIndex(vector<int>& nums) {
if (nums.size() < 3) return -1;
int sum = std::accumulate(nums.begin(), nums.end(), 0);
int left_val = 0;
for (int i = 0; i < nums.size(); ++i) {
int right_val = sum - left_val - nums[i];
if (right_val == left_val) return i;
left_val += nums[i];
}
return -1;
}
};

举报

相关推荐

0 条评论