给定整数k 和排序数组A (可以包含正数和负数),从A 输出 2个整数a-b=k
和O(n) time
O(1) space
O(n logn)解决方案:
O(n)
a[i]
,请使用二分查找在数组中找到a[i]+k
:O(log n)
总时间:O(n logn)
O(n)解决方案:
O(n)
O(1)
总时间:O(n)
空格:O(n)
但是他希望O(n)
解决方案带有O(1)
额外空间。有人有任何想法吗?
答案 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)
空间。