[LeetCode] 724. Find Pivot Index Find the center index of the array (Easy) (JAVA) One question per day

[LeetCode] 724. Find Pivot Index Find the center index of the array (Easy) (JAVA)

Subject address: https://leetcode.com/problems/find-pivot-index/

Title 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 all the numbers to the left of the index is equal to the sum of all 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.

Constraints:

  • The length of nums will be in the range [0, 10000].
  • Each element nums[i] will be an integer in the range [-1000, 1000].

General idea

Given an array nums of integer type, write a method that returns the "center index" of the array.

We define the center index of the array like this: the sum of all the elements on the left of the center index of the array is equal to the sum of all the elements on the right.

If the array does not have a central index, then we should return -1. If the array has multiple center indexes, then we should return the one closest to the left.

Problem-solving method

  1. First traverse it again to find the sum of the array
  2. Traverse again, because the "center index" will divide the array into two, and the left and right sides are the same, so the position of pre * 2 + nums[i] == sum is the "center index"
  3. Time complexity O(n)
class Solution {
    public int pivotIndex(int[] nums) {
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
        }
        int pre = 0;
        for (int i = 0; i < nums.length; i++) {
            if (pre * 2 + nums[i] == sum) return i;
            pre += nums[i];
        }
        return -1;
    }
}

Execution time: 1 ms, beating 100.00% of Java users
Memory consumption: 39.2 MB, beating 40.28% of Java users

Welcome to pay attention to my official account, LeetCode updates one question every day

Guess you like

Origin blog.csdn.net/qq_16927853/article/details/113307420