【发布时间】:2021-05-27 07:11:25
【问题描述】:
问题:
我有 2 个数组 A[v] 和 M[w],长度为 分别为 v 和 w。给定两个数字 p 和 q,我想找出这些数组的两个元素之和有多少组合满足以下条件:
p >= A[v] + M[w] q
一个例子:
让:
A = [9, 14, 5, 8, 12, 2, 16],
v = 7,
M = [6, 2, 9, 3, 10],
w = 5,
p = 21,
q = 24
由于以下组合,答案将是 5:
- 14 + 9 = 23
- 14 + 10 = 24
- 12 + 9 = 21
- 12 + 10 = 22
- 16 + 6 = 22
我尝试过的:
以下是该问题在C++中的实现:
int K = 0; // K is the answer
for (int i=0; i<v; i++) {
for (int j=0; j<w; j++) {
if (A[v]+M[w] >= p && A[v]+M[w] <= q) {
++K;
}
}
}
如我们所见,上面的代码在循环中使用了循环,从而使程序的时间复杂度 Ο(v×w) 对于大型程序来说相当慢数组。
问题
有没有最快的方法解决这个问题?
【问题讨论】:
-
尚未彻底测试,但排序和二进制搜索可能适用。
-
constraints是什么?maximum possible size of the array是什么?range of p and q是什么?possible size of each element of the array是什么?
标签: c++ arrays algorithm math combinations