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 <= 109Only one valid answer exists.
The easiest way to solve this problem is to iterate through each number of the array i , for each i , check every other number j in the array, sum them up and compare with target to find out the answer. But this is a O(n^2)time complexity which is not optimal at all.
One optimal solution would be utilizing the feature of hashmap, here goes the java code
public class TwoSum {
int[] solution(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int diff = target - nums[i];
if (map.get(diff) != null && map.get(diff) != i) {
return new int[]{i, map.get(diff)};
}
map.put(nums[i], i);
}
return new int[] {0, 0};
}
}
Cheers !
