两数和 - 差等于目标值
题目:
描述
给定一个排序后的整数数组,找到两个数的 差 等于目标值。
你需要返回一个包含两个数字的列表[num1, num2], 使得num1与num2的差为target,同时num1必须小于num2。
保证只有一个答案。
注意:要求用O(1)空间复杂度完成。
样例
例1:
输入: nums = [2, 7, 15, 24], target = 5
输出: [2, 7]
解释:
(7 - 2 = 5)
例2:
输入: nums = [1, 1], target = 0
输出: [1, 1]
解释:
(1 - 1 = 0)
public class Solution {
/**
* @param nums: an array of Integer
* @param target: an integer
* @return: [num1, num2] (num1 < num2)
*/
public int[] twoSum7(int[] nums, int target) {
// write your code here
Arrays.sort(nums);
target = Math.abs(target);
int j = 0;
for(int i = 0; i < nums.length; i++) {
// j 取最大值是因为 上一次循环后 nums[j] - nums[(当前i) - 1] > target
j = Math.max(i + 1, j);
while(j < nums.length && nums[j] - nums[i] < target) {
j++;
}
if(j == nums.length) {
break ;
}
if(nums[j] - nums[i] == target) {
return new int[]{nums[i], nums[j]};
}
//nums[j] - nums[i] > target 此时只需要i++
}
return new int[]{};
}
}