Day 43 of 100 Days LeetCode Challenge
Question 19 of 75 - LeetCode Weekly Challenge

LeetCode Challenge #724. Find Pivot Index

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
Java Video Solution
C++ Video Solution
Java Solution
				
					class Solution {
    public int pivotIndex(int[] nums) {
        int rsum = 0;
        for(int ele : nums ){
            rsum += ele ;
        }
        int lsum = 0 ;
        for(int i=0;i<nums.length;i++){
            rsum -= nums[i];

            if(rsum == lsum){
                return i ;
            }
            lsum += nums[i];
        }
        return -1 ;
    }
}
				
			
C++ Solution
				
					class Solution {
public:
int pivotIndex(vector<int>& nums) {

        // Calculate the total sum of all elements in the array
        int sum = 0;
        
        for (int i = 0; i < nums.size(); i++) {
            sum += nums[i];
        }
        
        // Initialize variables to store the sum on the left and right of the current index
        int sum1 = sum;  // Initially set to the total sum
        int sum2 = 0;    // Initially set to 0
        
        // Iterate through the array to find the pivot index
        for (int i = 0; i < nums.size(); i++) {

            // Update sum1 by subtracting the current element
            sum1 -= nums[i];
            
            // Check if the sum on the left (sum1) is equal to the sum on the right (sum2)
            if (sum1 == sum2) {
                // If true, return the current index as the pivot index
                return i;
            }
            
            // Update sum2 by adding the current element
            sum2 += nums[i];
        }
        
        // If no pivot index is found, return -1
        return -1;
    }
};

				
			
Code Explanation

In this program, we have to find the pivot index in an array of integers (‘nums’), where the pivot index is the index such that the sum of elements to the left is equal to the sum of elements to the right.

Let’s see the step-by-step approach towards the solution:

  1. We will calculate the total sum of all elements in the array (‘nums’) using the variable ‘sum’. 
  1. Now, for finding the pivot index, initialise two variables, ’sum1’ and ‘sum2’, where ‘sum1’ is initially set to the total sum and ‘sum2’ is set to 0. 

The ‘For’ loop is used here to iterate the code through the array. We will subtract the current element from ‘sum1’ and check it ‘sum1’ is equal to ‘sum2’ or not. 

Sum1 -= nums[ i ] 

  1. After that, we will check whether (sum==sum1) if yes, return ’ i ‘, i.e. the current index as the pivot index. 
  • if they are not equal, update ’sum2’ by adding the current element. Now, since it is a pivot we have to include it now 
  1. If no index is found till the last point, then return -1 to indicate there’s no pivot index.

Summary:- This solution tackles the problem of finding the pivot index in an array by maintaining two running sums. It’s a concise and efficient approach with a linear time complexity.

Happy Coding with edSlash