arrays - 查找数组中差异为 's' 的所有对

标签 arrays algorithm time-complexity

我有一个长度为n的数组,其整数在[0,n^5]范围内。我想在数组中找到所有对,它们之间的差异是给定的值为s的整数变量(例如,对于数组中的整数a,b,我们如果满足给定的要求,则将具有 a-b=s 或 b-a=s)。

找到所有对的最佳确定性算法(即不使用哈希集或相似性)是什么?我可以在 O(n) 时间复杂度内完成吗?

我的想法是首先在 O(n) 时间内使用 Radix-Sort 对数组进行排序,然后利用数组已排序的事实找到所有对 但我不知道如何实现它。

谢谢。

最佳答案

一旦使用基数排序对数组进行排序(假设输入提供复杂性 O(n)),您可以使用双指针方法,其中 p1 和 p2 都位于数组的开头,并且迭代数组直到 p2 < number数组中元素的个数

粗略的伪代码..

while p2 < array.length && p1 < array.length
  if array[p2] - array[p1] == k
    increment count of unique pairs
    increment p1
    increment p2
  else if array[p2] - array[p1] > k
    increment p1
  else 
    increment p2
  end
end

编辑: p1 < array.length对于负 s 值。

关于arrays - 查找数组中差异为 's' 的所有对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45392840/

相关文章:

algorithm - 三角形中的路径数

android - 减少样本数量的技术和算法

java - 分析希尔排序算法(大O)

c - C 中具有相等总和的唯一对

c - 确定特定功能的时间复杂度

将指针转换为二维数组

c++ - C++:通过函数传递指针数组的语法

algorithm - 使用旋转卡尺测量凸多边形的直径

c - 如何理解指针数组的类型转换?

javascript - setState 不设置值