【发布时间】:2021-10-28 04:51:50
【问题描述】:
给定一个整数数组和一个目标值,确定差值等于目标值的数组元素对的数量。
这里是问题的链接: https://www.hackerrank.com/challenges/pairs/problem
我的算法应该做到以下几点:
- 对数组进行排序
- 比较 2 个邻居编号 (i, i+1): 如果它们之间的差异等于给定的数字 k,则递增 结果 如果差值小于给定数字,则比较 i+1 用 0,...,i-1 个元素尝试在其中找到可能的对。 如果差值大于给定数字 k,则增加 i 并对下一对执行相同操作。
我认为算法是正确的,我在实现中找不到错误。我的代码通过了主要测试用例并通过了 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;
}
【问题讨论】:
-
听起来你解决了这个问题,但在未来包含 13/18 测试用例中的哪一个失败会很有用。
-
@JeremyCaney 感谢您的建议,但问题是它们已被锁定且不可见。
标签: c# .net algorithm search array-algorithms