Comparing an array element to a value throws an error

Comparing an array element to a value throws an error
typescript
Ethan Jackson

I'm not sure what I am doing wrong, but when I execute the code below:

func twoSum(_ nums: [Int], _ target: Int) -> [Int] { let length = nums.count-1; for index1 in 0...length { let difference = target - nums[index1]; print(target, difference, nums[index1]) if (nums[index1] < difference) { for index2 in index1+1...length { if (nums[index2] == difference) { return [index1, index2]; } } } } return []; } let summer = twoSum([-1,-2,-3,-4,-5], -8)

I get the following error:

Swift/ClosedRange.swift:347: Fatal error: Range requires lowerBound <= upperBound

Interestingly, if I change the condition for the if statement to nums[index1] <= target, it doesn't crash.

Answer

The issue is that in your inner for-loop, when index equals length, your inner loop becomes: for index2 in index1+1...length.

This is equivalent to for index2 in nums.count ... nums.count - 1. As the error says, the beginning of a loop range can't be larger than the end of the range.

Solution: You can just change if (nums[index1] < difference) to index1 + 1 <= length

Related Articles