Two Sum
Given an array and a target, return the indices of the two numbers that add up to the target. Solve in O(n) using a hash map.
Sample input
[2, 7, 11, 15], target = 9
Sample output
0 1
Solution
def two_sum(nums, target):
seen = {}
for i, num in enumerate(nums):
if target - num in seen:
return [seen[target - num], i]
seen[num] = i
return []
print(*two_sum([2, 7, 11, 15], 9))
function twoSum(nums, target) {
const seen = new Map();
for (let i = 0; i < nums.length; i++) {
if (seen.has(target - nums[i])) {
return [seen.get(target - nums[i]), i];
}
seen.set(nums[i], i);
}
return [];
}
console.log(twoSum([2, 7, 11, 15], 9).join(" "));
import java.util.HashMap;
import java.util.Map;
public class Main {
static int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> seen = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if (seen.containsKey(target - nums[i])) {
return new int[]{seen.get(target - nums[i]), i};
}
seen.put(nums[i], i);
}
return new int[]{};
}
public static void main(String[] args) {
int[] res = twoSum(new int[]{2, 7, 11, 15}, 9);
System.out.println(res[0] + " " + res[1]);
}
}
fun twoSum(nums: IntArray, target: Int): IntArray {
val seen = HashMap<Int, Int>()
for (i in nums.indices) {
seen[target - nums[i]]?.let { return intArrayOf(it, i) }
seen[nums[i]] = i
}
return intArrayOf()
}
fun main() {
println(twoSum(intArrayOf(2, 7, 11, 15), 9).joinToString(" "))
}
func twoSum(_ nums: [Int], _ target: Int) -> [Int] {
var seen = [Int: Int]()
for (i, num) in nums.enumerated() {
if let j = seen[target - num] {
return [j, i]
}
seen[num] = i
}
return []
}
print(twoSum([2, 7, 11, 15], 9).map(String.init).joined(separator: " "))
List<int> twoSum(List<int> nums, int target) {
final seen = <int, int>{};
for (var i = 0; i < nums.length; i++) {
if (seen.containsKey(target - nums[i])) {
return [seen[target - nums[i]]!, i];
}
seen[nums[i]] = i;
}
return [];
}
void main() {
print(twoSum([2, 7, 11, 15], 9).join(' '));
}
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> seen;
for (int i = 0; i < (int) nums.size(); i++) {
auto it = seen.find(target - nums[i]);
if (it != seen.end()) return {it->second, i};
seen[nums[i]] = i;
}
return {};
}
int main() {
vector<int> nums = {2, 7, 11, 15};
vector<int> res = twoSum(nums, 9);
cout << res[0] << " " << res[1] << endl;
return 0;
}
#include <stdio.h>
int main() {
int nums[] = {2, 7, 11, 15};
int n = 4, target = 9;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (nums[i] + nums[j] == target) {
printf("%d %d\n", i, j);
return 0;
}
}
}
return 0;
}