OJ1793-找出其中两个元素相减等于给定差值 diff 的所有不同组合的个数(双指针)
题目描述
给定一个数组,每个元素的值是唯一的,找出其中两个元素相减等于给定差值 diff 的所有不同组合的个数。
组合是无序的:如:(1, 4)和(4, 1)表示的是同一个组合。
解答要求
时间限制:1000ms, 内存限制:256MB
输入
输入三行:
第一行为一个整数,表示给定差值diff;范围[-50000, 50000]
第二行也为一个数字,表示数组的长度;范围[2, 102400]
第三行为该数组,由单个空格分割的一组数字组成;其中元素的值范围[-20, 102400]
用例保证第三行数字和空格组成的字符串长度不超过 649999
输出
1个整数,表示满足要求的不同组合的个数
本题注意点:超时限制,有个超级大的用例,一般的for循环会超时,所以尽量用双指针
方法1: 使用双指针
public static int diffCombine(int diff, int[] arr) {
Arrays.sort(arr); // 先升序
int cnt = 0;
int left = 0;
int right = 1;
while (right < arr.length) {
if (left == right) {
// 针对用例arr=[1,2,3,4,5], diff=0
right++;
continue;
}
int cha = Math.abs(arr[right] - arr[left]);
if (cha < Math.abs(diff)) {
right++;
} else if (cha == Math.abs(diff