2 minutes
Leetcode 1991
1991. Find the Middle Index in Array
The idea of this solution is pretty simple:
- We find the sum of all the numbers in
nums
(In this solution, I am calling itsum
) - Then we check whether
sum - left - nums[i] == left
(I will get back to whatleft
is and what this whole thing means in the following parts). If so, we can returni
(The index). - The variable called
left
keeps track of the left sum, so we doleft += nums[i]
.
So, if you don’t understand what sum - left - nums[i] == left
is doing, read the following:
There is a small part that I would assume someone would have missed, and that is in the following:
nums[0] + nums[1] + ... + nums[middleIndex-1] == nums[middleIndex+1] + nums[middleIndex+2] + ... + nums[nums.length-1]
We are supposed to make the sum of all the numbers before nums[i]
equal to the sum of all the numbers after nums[i]
, not including nums[i]
.
So doing sum - left - nums[i] == left
is basically checking whether right sum == left sum
:
sum - left
is for getting the sum of all the elements to the right ofnums[i - 1]
(Basically all the elements to the right ofnums[i]
plusnums[i]
)- Subtracting
nums[i]
fromsum - left
is for taking out thenums[i]
. - The two bullet points before this one were for finding the right sum, but since we know the left sum we can just check whether
right sum == left sum
.
func findMiddleIndex(nums []int) int {
sum := 0
left := 0
for _, num := range nums { sum += num }
for i := range nums {
if sum - left - nums[i] == left {
return i
}
left += nums[i]
}
return -1
}
Read other posts