【发布时间】:2020-07-28 22:51:08
【问题描述】:
我们的任务是计算同时属于这两个列表的元素的数量。 例如,对于列表
vector<int> arr1{5,2,8,9}
vector<int> arr2{3,2,9,5}
答案是 3,因为数字 2、5 和 9 都属于这两个列表。 我想以尽可能低的时间复杂度来制作这个算法 - O(nlogn)。我的目标是对列表进行排序,然后一次遍历它们并找到共同的元素。
这是我目前所拥有的:
#include <bits/stdc++.h>
using namespace std;
int main() {
int counter;
vector<int> arr1{ 5, 2, 8, 9 };
vector<int> arr2{3, 2, 9, 5};
sort(arr1.begin(), arr1.end()); // 2, 5, 8, 9
sort(arr2.begin(), arr2.end()); // 2, 3, 5, 9
for (int i = 0; i < 4; i++) {
// insert code here
}
cout << counter;
return 0;
}
任何帮助将不胜感激!
【问题讨论】:
-
您需要什么帮助?你知道笔和纸是怎么做的吗?
-
@idclev463035818 好吧,是的,我正在努力使这个基本算法在 O(nlogn) 时间内尽可能高效
-
如果你有重复的
A={5,5,5,2,2,8,9,9}, B={3,3,2,2,2,2,9,5}怎么办?答案还应该是 3 吗? -
@0x499602D2 感谢您要求澄清。在这种情况下,您不会计算重复项,因此答案仍然是 3,因为数字 2、5、9 属于两个列表,无论它们是否出现
-
向量的取值范围是否受限?
标签: c++ vector stl time-complexity stdvector