两数和 - 差等于目标值

题目:

描述
给定一个排序后的整数数组,找到两个数的 差 等于目标值。
你需要返回一个包含两个数字的列表[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[]{};
    }
}