【发布时间】:2015-09-22 20:23:26
【问题描述】:
昨天我在面试中做了一个C++测试,我不得不在下面的代码中找到错误。
该算法将输入一个按非降序排序的整数向量和一个整数 K。如果该向量仅包含 1 和 k 之间的所有数字并且至少包含一次,则该算法返回 true,否则返回 false:
([1,1,2,3,3,4],4) --> 真
([1,1,3],3) --> 错误
这是实现:
bool algorithm(vector<int> &A, int k)
{
n = A.size();
for(int i = 0; i < n-1; i++)
{
if(A[i]+1 < A[i+1])
return false;
}
if(A[0] != 1 && A[n-1] != K)
{
return false;
}
else
{
return true;
}
}
我无法找到错误/错误。有人能告诉我这段代码中的错误在哪里吗?
【问题讨论】:
-
您是否尝试过创建一些测试用例并使用调试器单步执行代码?它可能会在很大程度上帮助您弄清楚这一点并在未来更好地回答这样的问题。
-
调试器对于发现问题非常有帮助。 Stack Overflow 不是从长远角度来看的。
-
还没有。他们在没有使用调试器的情况下为您提供了这一点,因此在没有调试器的帮助的情况下也可以解决这个问题。我试图用其他一些测试用例来思考和推理,但我没有看到错误。
-
“不递减”是什么意思?
-
可能我用错了术语。我的意思是不减少
i <= i+1。