两数之和
题目
给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。
你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以 0 开头。注意事项
你可以假设只有一组答案。样例
给出 numbers = [2, 7, 11, 15], target = 9, 返回 [1, 2].
题解
本题是要求找出数组中一对i,j满足numbers[i]+numbers[j]==target。那么我们在遍历i时将target-numbers[i]和i作为K,V存入HashMap,同时查找HashMap中是否有和numbers[i]相等的数,如果有则hash.get(numbers[?])和i就是答案。
当然也可以用HashMap+排序+双指针的方法解决问题。
public class Solution {
/*
* @param numbers : An array of Integer
* @param target : target = numbers[index1] + numbers[index2]
* @return : [index1 + 1, index2 + 1] (index1 < index2)
*/
public int[] twoSum(int[] numbers, int target) {
HashMap<Integer,Integer> hash = new HashMap<Integer,Integer>();
int[] result = new int[2];
for (int i=0;i<numbers.length;i++)
{
if (hash.containsKey(numbers[i]))
{
result[0] = hash.get(numbers[i])+1;
result[1] = i+1;
return result;
}
hash.put(target-numbers[i],i);
}
return result;
}
}
Last Update 2016.9.30