code - 两数之和匹配目标值
2020-04-11 本文已影响0人
BestFei
Q:给定一个整数数组 nums 和一个目标值 target,请在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
A:定义一个map存储数组中每个值对应的差值和自己的游标。
然后数组中每个值再去跟这个map的差值去匹配,匹配成功则返回游标
public class FindValue {
public static int[] twoSum(int[] nums, int target) {
if (nums == null || nums.length <= 1) {
return new int[2];
}
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
// key 为每个数组对应的差值,value为数组的游标
for (int i = 0; i < nums.length; i++) {
map.put(target - nums[i], i);
}
// 数组里的每个值去和差值匹配,匹配上则返回差值对应数组里的游标
for (int i = 0; i < nums.length; i++) {
Integer v = map.get(nums[i]);
// can't use itself
if (v != null && v != i) {
// 返回的是两个游标
return new int[] { i , v };
}
}
return null;
}
public static void main(String[] args) {
int[] nums = {2,3,5,7,11};
int target = 9;
int[] result = twoSum(nums,target);
System.out.println(nums[result[0]]+"+"+nums[result[1]]+"="+target);
}
}