610. Two Sum - Difference equals to target

Description

Given an array of integers, find two numbers that their difference equals to a target value.

where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are NOT zero-based.

It's guaranteed there is only one available solution

Example

Example 1:

Input: nums = [2, 7, 15, 24], target = 5

Output: [1, 2]

Explanation:

(7 - 2 = 5)

Example 2:

Input: nums = [1, 1], target = 0

Output: [1, 2]

Explanation:

(1 - 1 = 0)

思路

看见两数与目标值可能想到双指针,但是不同于两数和的双指针,双向双指针的两数差并没有什么规律可以压缩区间,但是同向双指针在这个题中会用的比较巧妙, 因为排序后的数组是递增的, 那么一个数与后面所有数的差会越来越大, 同时与同一个数的差前面的数会小于后面的数,所以可以固定一个数的指针,然后移动其后面数的指针,直到第一个大于target,这时候后面指针保持不动,将前面数指针往后移动一位,继续寻找目标值,在寻找过程中遇到目标值则返回。

此题的另一个难点是要返回数组的原始坐标,但是我们排序过数组之后其坐标会变化,所以需要先处理一下数组记住每个数对应的原始坐标,这里用了遍历数组然后存tuple进数组。然后对tuple数组取key进行sorted。

还有需要注意返回的Index要求递增,就需要加一个判断。

代码:


你可能感兴趣的:(610. Two Sum - Difference equals to target)