Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/1991.html
1991. Find the Middle Index in Array
Level
Easy
Description
Given a 0-indexed integer array nums
, find the leftmost middleIndex
(i.e., the smallest amongst all the possible ones).
A middleIndex
is an index where nums[0] + nums[1] + ... + nums[middleIndex-1] == nums[middleIndex+1] + nums[middleIndex+2] + ... + nums[nums.length-1]
.
If middleIndex == 0
, the left side sum is considered to be 0
. Similarly, if middleIndex == nums.length - 1
, the right side sum is considered to be 0
.
Return the leftmost middleIndex
that satisfies the condition, or -1
if there is no such index.
Example 1:
Input: nums = [2,3,-1,8,4]
Output: 3
Explanation:
The sum of the numbers before index 3 is: 2 + 3 + -1 = 4
The sum of the numbers after index 3 is: 4 = 4
Example 2:
Input: nums = [1,-1,4]
Output: 2
Explanation:
The sum of the numbers before index 2 is: 1 + -1 = 0
The sum of the numbers after index 2 is: 0
Example 3:
Input: nums = [2,5]
Output: -1
Explanation:
There is no valid middleIndex.
Example 4:
Input: nums = [1]
Output: 0
Explantion:
The sum of the numbers before index 0 is: 0
The sum of the numbers after index 0 is: 0
Constraints:
1 <= nums.length <= 100
-1000 <= nums[i] <= 1000
Solution
For each element in nums
, calculate the sum of elements to its left and the sum of elements to its right. Then loop over nums
from left to right and return the first index such that the sum of elements to its left equals the sum of elements to its right. If such an index does not exist, return -1.
-
class Solution { public int findMiddleIndex(int[] nums) { int length = nums.length; int[] leftSum = new int[length]; for (int i = 1; i < length; i++) leftSum[i] = leftSum[i - 1] + nums[i - 1]; int[] rightSum = new int[length]; for (int i = length - 2; i >= 0; i--) rightSum[i] = rightSum[i + 1] + nums[i + 1]; for (int i = 0; i < length; i++) { if (leftSum[i] == rightSum[i]) return i; } return -1; } } ############ class Solution { public int findMiddleIndex(int[] nums) { int left = 0, right = Arrays.stream(nums).sum(); for (int i = 0; i < nums.length; ++i) { right -= nums[i]; if (left == right) { return i; } left += nums[i]; } return -1; } }
-
// OJ: https://leetcode.com/problems/find-the-middle-index-in-array/ // Time: O(N) // Space: O(1) class Solution { public: int findMiddleIndex(vector<int>& A) { int right = accumulate(begin(A), end(A), 0), N = A.size(), left = 0; for (int i = 0; i < N; ++i) { if (i - 1 >= 0) left += A[i - 1]; right -= A[i]; if (left == right) return i; } return -1; } };
-
class Solution: def findMiddleIndex(self, nums: List[int]) -> int: s = sum(nums) total = 0 for i, num in enumerate(nums): total += num if total - num == s - total: return i return -1 ############ # 1991. Find the Middle Index in Array # https://leetcode.com/problems/find-the-middle-index-in-array class Solution: def findMiddleIndex(self, nums: List[int]) -> int: for i,x in enumerate(nums): left = sum(nums[:i]) if i > 0 else 0 right = sum(nums[i + 1:]) if i < len(nums) else 0 if left == right: return i return -1
-
func findMiddleIndex(nums []int) int { var left, right int for _, x := range nums { right += x } for i, x := range nums { right -= x if left == right { return i } left += x } return -1 }
-
function findMiddleIndex(nums: number[]): number { let left = 0, right = nums.reduce((a, b) => a + b); for (let i = 0; i < nums.length; ++i) { right -= nums[i]; if (left == right) { return i; } left += nums[i]; } return -1; }
-
/** * @param {number[]} nums * @return {number} */ var findMiddleIndex = function (nums) { let left = 0, right = nums.reduce((a, b) => a + b); for (let i = 0; i < nums.length; ++i) { right -= nums[i]; if (left == right) { return i; } left += nums[i]; } return -1; };