在排序数组中找到两个整数,使得a - b = k

时间:2012-06-06 05:34:57

标签: arrays algorithm

给定整数k 排序数组A (可以包含正数和负数),从A 输出 2个整数a-b=kO(n) time

中的O(1) space

O(n logn)解决方案:

  1. 遍历数组:O(n)
  2. 对于元素a[i],请使用二分查找在数组中找到a[i]+kO(log n)
  3. 总时间:O(n logn)

    O(n)解决方案:

    1. 将数组的所有元素存储在哈希表中:O(n)
    2. 对于元素a [i],检查哈希表中是否[i] + k:O(1)
    3. 总时间:O(n)

      空格:O(n)

      但是他希望O(n)解决方案带有O(1)额外空间。有人有任何想法吗?

2 个答案:

答案 0 :(得分:8)

创建两个索引指针 - 左和右,初始化到数组的开头(0)。如果[左] + k> a [右],增加右,否则增加左。等于时停止

答案 1 :(得分:5)

这个想法是使用两个指向数组的指针说a和b。 最初他们都指向开头(a=b=0)。

如果ar[a]+k < ar[b],那么你提前了。

如果ar[a]+k > ar[b],则提前b。

如果ar[a]+k == ar[b],那么您已找到解决方案。

那是O(n)时间和O(1)空间。