我在解决 HackerRank - "Pairs" 问题(评级中等)时的错误在哪里?

Where is my mistake in solution of HackerRank - "Pairs" problem (rated medium)?

给定一个整数数组和一个目标值,确定差值等于目标值的数组元素对的数量。

这是问题的 link: https://www.hackerrank.com/challenges/pairs/problem

我的算法应该执行以下操作:

我认为算法是正确的,我在实现中找不到错误。我的代码通过了主要测试用例并通过了 5/18 个附加测试用例。请帮我找出错误。

这是我的代码:

public static int pairs(int k, List<int> arr)
{
    arr.Sort();
    var result = 0;
    
    for (var i = 0; i < arr.Count - 1; ++i){
        var diff = arr[i + 1] - arr[i];
        if (diff > k) continue;
        else if (diff == k) ++result;
        else {
            result = CompareWithPreviousValues(arr, k, i + 1, result);
        }
    }
    
    return result;
}

private static int CompareWithPreviousValues(List<int> arr, int k, int indexOfElementToCompare, int result)    {
    var j = 2;
    for (var i = indexOfElementToCompare; i - j >= 0; --i){
        var diff = arr[i] - arr[i - j];
        if (diff < k) ++j;
        else if (diff == k){
            ++result;
            return result;
        }
        else return result;
    }
    
    return result;
}

在 post 提出问题之前,我再次检查了代码并发现了我犯的错误..但是由于在 Whosebug 中没有讨论这个问题,一些人可能会发现错误在代码中,我决定 post 无论如何。我花时间填写了问题 :D

所以这个错误..当然是一个小错误,但是一个不愉快的错误。 DISCLAMER 对于那些想找出错误的人,我建议不要继续阅读下面的内容,因为有固定代码:D

错误在“CompareWithPreviousValues”方法的for循环中。 每次迭代后,由于某种原因我被减少了。我可能机械地写了 i,因为大多数循环都使用“i”。 所以这是该方法的正确版本:

private static int CompareWithPreviousValues(List<int> arr, int k, int n, int result)    {
    var j = 2;
    for (var i = n; i - j >= 0; ++j){
        var diff = arr[i] - arr[i - j];
        if (diff < k) continue;
        else if (diff == k){
            ++result;
            return result;
        }
        else return result;
    }
    
    return result;
}