Write a function that takes an array of numbers (integers for the tests) and a target number.
It should find two different items in the array that, when added together, give the target value.
The indices of these items should then be returned in a tuple like so: (index1, index2).
For the purposes of this kata, some tests may have multiple answers; any valid solutions will be accepted.
The input will always be valid (numbers will be an array of length 2 or greater, and all of the items will be numbers; target will always be the sum of two different items from that array).
Based on: http://oj.leetcode.com/problems/two-sum/
example:
twoSum [1, 2, 3] 4 === (0, 2)
my solution:
import java.util.HashMap; import java.util.Scanner; import java.util.Map; class TwoSum { private static int[] findTwoSum(int[] nums, int target) { Map<Integer, Integer> numMap = new HashMap<>(); for (int i = 0; i < nums.length; i++) { int complement = target - nums[i]; if (numMap.containsKey(complement)) { return new int[] { numMap.get(complement), i }; } else { numMap.put(nums[i], i); } } return new int[] {}; } }
best kata practice:
import java.util.HashMap; import java.util.Map; public class Solution { public static int[] twoSum(int[] numbers, int target) { Map<Integer, Integer> numToIndexMapping = new HashMap<>(numbers.length); for(int i = 0; i < numbers.length; i++) { if(numToIndexMapping.containsKey(target - numbers[i])) { return new int[] { i, numToIndexMapping.get(target - numbers[i]) }; } else { numToIndexMapping.put(numbers[i], i); } } return new int[0]; } }