【发布时间】:2017-08-05 18:28:56
【问题描述】:
我正在学习 C++,最近遇到了这个问题:
来自 std::cin 的正整数的反向序列,当接近 -1 时序列结束。这个“-1”不应该是序列的一部分。打印出逆序,也必须以-1结尾。
所以,我已经编写了非常简单的代码来做到这一点,就性能而言,它可能不是最好的,好像我算对了,总体 O(N^2 / 2)。
int n = 0;
vector<int> numbers; //placeholder vector for input
while (n != -1) {
cin >> n;
numbers.push_back(n);
}
numbers.erase(numbers.end() - 1); // -1 should not be the part of the vector, so I erase it
n = numbers.size() - 1;
for (int i = 0; i < n / 2; ++i) { //swapping
int tmp = numbers[i];
numbers[i] = numbers[n - i];
numbers[n - i] = tmp;
}
for (auto a : numbers) //printing out
cout << a << " "; //each integer in input and output is separated by spacebar
cout << -1; //last element should be '-1'
不幸的是,这段代码通过了 4/10 的测试用例,这让我很震惊。
如果有人能给我一些关于我的代码有什么问题的提示或关于性能的任何一般性建议,我将不胜感激。
【问题讨论】:
-
顺便说一句:O(N^2/2) = O(N^2)
-
试试
for (i = 0; i < n; ++i, --n)并将n - i替换为n? -
您尝试在自己身上运行哪些测试用例?
-
@PaulHankin 他们不是我的,只是没有任何描述的自动化测试用例。无论如何,我犯了一个现在发现的愚蠢错误。谢谢。