题解 | #两数之和#
两数之和
http://www.nowcoder.com/practice/20ef0972485e41019e39543e8e895b7f
public class Solution {
/**
* 题目描述:给出一个整型数组 numbers 和一个目标值 target,
* 请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。
* 解题思路:创建一个哈希表HashMap<Integer,Integer>,遍历数组;首先将目标值target减去
* 当前遍历的数组值(numbers[i])=another,再从哈希表HashMap中查找是否存在key:another,
* 如果存在,就存在两个数(another,i)相加为target。并创建一个长度为2的新数组arr,
* arr[0] = hashMap.get(another);arr[1] = i+1;
* @param numbers int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
public int[] twoSum (int[] numbers, int target) {
// write code here
//创建一个哈希表
HashMap<Integer,Integer> hashMap = new HashMap<>(numbers.length);
int[] arr = new int[2];
for (int i = 0; i < numbers.length; i++) {//遍历数组
int another = target-numbers[i];//首先将目标值target减去当前遍历的数组值(numbers[i])=another,
//再从哈希表HashMap中查找是否存在key:another,如果存在,就存在两个数(another,i)相加为target。
if(hashMap.containsKey(another)){
arr[0] = hashMap.get(another);
arr[1] = i+1;
return arr; //返回结果,结束循环
}else{
hashMap.put(numbers[i],i+1);
}
}
return null;
}
}