TwoSum (Hashtable Way)
Question
Given an array of integers nums
and an integer target
, return indices of the two numbers such that they add up to target
.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
You can return the answer in any order.
Example:
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].
Input: nums = [3,2,4], target = 6
Output: [1,2]
Input: nums = [3,3], target = 6
Output: [0,1]
Solution
Note: When given the array is sorted, it's might be a better idea to use TwoSum (Two Pointers way)
The idea is as you go through the array, you use a dictionary to record what you have
class Solution:
def twoSum(self, arr: List[int], target: int) -> List[int]:
numberIndex = {} # {number: index}
for index, num in enumerate(arr):
remainder = target - num
if remainder in numberIndex:
return [index, numberIndex[remainder]]
numberIndex[num] = index
return []
Time complexity: $O(n)$
Space complexity: $O(logn)$