【发布时间】:2014-07-17 11:17:39
【问题描述】:
例如如果数组 A 是
A[0] = 0.1
A[1] = 0.6
A[2] = 1.2
A[3] = 1.7
A[4] = 3.5
那么对于 (3,4) 对,我们有 A[3]*A[4] > A[3]+A[4]
我想在一个数组中找到这样对的数量。
还有A[i] = A1 [i] + A2[i]/1,000,000
其中 A1 和 A2 是给定的输入,A1 和 A2 按排序顺序。
用 O(n^2) 算法回答是微不足道的。有人告诉我有 O(n) 解决方案,无需使用额外空间。我正在寻找那个。
【问题讨论】:
-
O(n) 算法查找排序数组中的对数,其中 A[i]*A[j] > A[i] + A[j]
-
数字是无符号还是有符号?
-
@mch 无符号数
-
我以为我有一个解决方案,首先是重新排列不等式以给出
(A[i] - 1) * (A[j] - 1) > 1,但我能想到的最好的解决方案是O(n log n)。我认为这是正确的开始方式。 -
你认为的 O(nlogn) 解决方案是什么?
标签: java c++ c arrays algorithm