610. Two Sum - Difference equals
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要求递增,就需要加一个判断。
代码: