1. Two Sum
Difficult: Easy
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 1:
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].
Example 2:
Input: nums = [3,2,4], target = 6
Output: [1,2]
Example 3:
Input: nums = [3,3], target = 6
Output: [0,1]
Constraints:
2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
Only one valid answer exists.
Approach:
Simply using a brute force technique create two loops , loop over each element i for each element i iterate through the rest of the array with index j, starting from i+1.
Check if the sum of nums[i] + nums[j] === target
If it does then return the indices [i,j]
Javascript Solution (brute force):
var twoSum = function(nums, target) {
for(let i = 0 ; i < nums.length; i++) {
for(let j = i+1; j < nums.length; j++){
if(nums[i] + nums[j] == target) return [i,j]
}
}
};
Time Complexity O(n^2), Space complexity O(1)
Approach 2:
Another efficient way to solve this problem is by using a hash map/table. Which significantly reduces the time complexity from O(n^2) to O(n).
Javascript Solution 2 (Hash Map):
var twoSum = function(nums, target) {
let map = new Map() // initialize map
for(let i = 0 ; i < nums.length; i++){ // loop through all elements once
let complement = target - nums[i] // calculate complement
if(map.has(complement)){ // check if map contains the complement
return [map.get(complement), i] //answer
} else{
map.set(nums[i], i) // sets value in map if solution not found to fetch later if solution is found
}
}
};