给定一个整数数组,找到两个数的 差
等于目标值。index1必须小于index2。注意返回的index1和index2不是 0-based。
样例
例1:
输入: nums = [2, 7, 15, 24], target = 5
输出: [1, 2]
解释:
(7 - 2 = 5)
例2:
输入: nums = [1, 1], target = 0
输出: [1, 2]
解释:
(1 - 1 = 0)
注意事项
保证只有一个答案。
解题思路:
与Lintcode 56. 两数之和类似,不同的是之差有两种可能,可能是a-b,或者b-a,需要多考虑一种情况即可
public class Solution {
/**
* @param nums: an array of Integer
* @param target: an integer
* @return: [index1 + 1, index2 + 1] (index1 < index2)
*/
public int[] twoSum7(int[] nums, int target) {
// write your code here
int[] res = new int[2];
Map<Integer, Integer> map = new HashMap<>();
for(int i=0; i<nums.length; i++){
if(map.containsKey(nums[i] - target)){
res[0] = map.get(nums[i] - target) + 1;
res[1] = i + 1;
break;
}else if(map.containsKey(nums[i] + target)){
res[0] = map.get(nums[i] + target) + 1;
res[1] = i + 1;
break;
}
else
map.put(nums[i], i);
}
return res;
}
}