【发布时间】:2020-12-22 15:47:28
【问题描述】:
我有一个程序要求输入N-numbers (Nint-s。
我有以下代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n,x;
cin >> n;
vector<int> v;
for (int i = 0; i < n; i++) {
cin >> x;
v.push_back(x);
}
sort(v.begin(), v.begin() + n);
for (int i = 0; i < n; i++) {
cout << v[i];
}
return 0;
}
但是当我在测试服务器上运行它时,一项测试失败了。而且好像不符合1秒的时间限制。
【问题讨论】:
-
v中的数字范围是多少? -
我们不知道它是在 std::sort 还是在 iostream 中花费更多时间。 (注释掉排序,看看你是否仍然得到一个时间失败?)你也可以尝试一个排序容器,因为你一次得到一个数字。
-
使用当前机器,运行时间应该低于 1 秒。在我的机器(Ryzen 3)上,
{ echo 100000; shuf -i1-100000; } | /tmp/a.out需要 1/10 秒。 -
如果您确定代码产生正确的结果,请尝试分析以找到瓶颈。
-
为什么不
v.end()?如果您知道所需的容量,请.reserve()。这可能是您的瓶颈。