Neetcode 150 - Two Sum
1. Brute Force
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
for j in range(i + 1, len(nums)):
for nums[i] + nums[j] == target:
return [i, j]
return []
-
Time Complexity: O(N^2).
-
Space Complexity: O(1)
2. Sorting
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
A = []
for i, num in enumerate(nums):
A.append([num, i])
# Sort it and binary search
A.sort()
i, j = 0, len(nums) - 1
while i < j:
curr = A[i][0] + A[j][0]
if curr == target:
return [min(A[i][1], A[j][1]), max(A[i][1], A[j][1])]
elif curr < target:
i += 1
else:
j -= 1
return []
-
Time Complexity: O(NlogN).
-
Space Complexity: O(N).
3. Hash Map (Pre-computed index)
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
indicies = {} # val -> index
for i, n in enumerate(nums):
indices[n] = i
for i, n in enumerate(nums):
diff = target - n
if diff in indices and indices[diff] != i:
return [i, indices[diff]]
-
Time Complexity: O(N).
-
Space Complexity: O(N).
4. Hash Map (Dynamic)
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
prevMap = {} # val -> index
for i, n in enumerate(nums):
diff = target - n
if diff in prevMap:
return [prevMap[diff], i]
prevMap[n] = i
-
Time Complexity: O(N).
-
Space Complexity: O(N).
Last Updated On October 22, 2025