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 whatleftis and what this whole thing means in the following parts). If so, we can returni(The index). - The variable called
leftkeeps 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 - leftis 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 - leftis 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