【Leetocde】 724. 寻找数组的中心下标

Given an array of integers nums, calculate the pivot index of this array.

The pivot index is the index where the sum of all the numbers strictly to the left of the index is equal to the sum of all the numbers strictly to the index’s right.

If the index is on the left edge of the array, then the left sum is 0 because there are no elements to the left. This also applies to the right edge of the array.

Return the leftmost pivot index. If no such index exists, return -1.

Example 1:

Input: nums = [1,7,3,6,5,6]
Output: 3

Explanation:

  • The pivot index is 3.
  • Left sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11
  • Right sum = nums[4] + nums[5] = 5 + 6 = 11

Example 2:

Input: nums = [1,2,3]
Output: -1

Explanation:

  • There is no index that satisfies the conditions in the problem statement.

Example 3:

Input: nums = [2,1,-1]
Output: 0

Explanation:

  • The pivot index is 0.
  • Left sum = 0 (no elements to the left of index 0)
  • Right sum = nums[1] + nums[2] = 1 + -1 = 0

Constraints:

1 <= nums.length <= 104
-1000 <= nums[i] <= 1000

Note:

  • This question is the same as 1991

AC:

/*
 * @lc app=leetcode.cn id=724 lang=cpp
 *
 * [724] 寻找数组的中心下标
 */

// @lc code=start
class Solution {
    
    
public:
    int pivotIndex(vector<int>& nums) {
    
    
        int total = accumulate(nums.begin(), nums.end(), 0);
        int sum = 0;
        for(int i = 0; i < nums.size(); i++)
        {
    
    
            if(2 * sum + nums[i] == total)
            {
    
    
                return i;
            }
            sum += nums[i];
        }
        return -1;
    }
};
// @lc code=end

ac

Thought:

  • 求出所有数组元素之和
  • 当数组移动到 i,与之前数组元素之和等于总和的一半,即为所求

Addition
std::accumulate()函数在 <numeric> 头文件中定义,用于将一个序列中的所有元素累加起来。其原型为:

template<typename InputIt, typename T>
T accumulate(InputIt first, InputIt last, T init);

其中:

  • InputIt:迭代器类型,指向待累加序列的第一个和最后一个元素。
  • T:累加结果类型,即最终的累加结果类型。
  • init:初始值,即累加的起始值。如果没有提供初始值,则使用序列中的第一个元素作为初始值。

示例代码如下:

#include <iostream>
#include <numeric>
#include <vector>

int main() {
    
    
    std::vector<int> v = {
    
    1, 2, 3, 4, 5};

    // 使用 accumulate 函数将 v 中的所有元素累加到 sum 中
    int sum = std::accumulate(v.begin(), v.end(), 0);

    std::cout << "The sum is " << sum << std::endl;

    return 0;
}

输出结果为:

The sum is 15
  • 在这个例子中,我们将 v 向量中的所有元素累加起来,并使用 sum 变量来存储结果。
  • 由于我们没有提供初始值,所以 accumulate() 函数使用序列中的第一个元素作为初始值,然后将剩余的元素累加到该初始值上。

猜你喜欢

转载自blog.csdn.net/qq_54053990/article/details/130936248