【Leetocde】 724. Finding the Center Subscript of an Array

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:

  • Find the sum of all array elements
  • When the array is moved to i, the sum of the previous array elements is equal to half of the sum, which is the desired value

Addition :
std::accumulate()The function is defined in <numeric>the header file and is used to add up all elements in a sequence. Its prototype is:

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

in:

  • InputIt: Iterator type, pointing to the first and last elements of the sequence to be accumulated.
  • T: The accumulation result type, that is, the final accumulation result type.
  • init: Initial value, that is, the starting value of accumulation. If no initial value is provided, the first element in the sequence is used as the initial value.

The sample code is as follows:

#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 output is:

The sum is 15
  • In this example, we add up all the elements in vthe vector and use sumthe variable to store the result.
  • Since we didn't provide an initial value, accumulate()the function uses the first element in the sequence as an initial value, and adds the remaining elements to that initial value.

Guess you like

Origin blog.csdn.net/qq_54053990/article/details/130936248