完整的问题是:
给定一个数组和一个值,删除该值的所有实例并返回新的长度。可以更改元素的顺序。除了新的长度之外你留下的东西并不重要。
并且有我的代码。
int removeElement(int A[], int n, int elem) {
vector<int> B;
for (int i=0; i<n; i++) {
if (A[i]!=elem) {
B.push_back(A[i]);
}
}
return B.size();
}
当我将此代码提交给在线评委时,它告诉我,我给出了错误答案。它回答的测试用例是:
Input: [4,5], 4
Your Output: [4]
Expected Output: [5]
我想知道为什么,我认为应该是对的,任何人都可以给我足够的理由让我理解吗?
答案 0 :(得分:2)
请求是删除该值的所有实例到位,即修改A指向的数组的内容。您需要返回一个新的长度,以便数组{ {1}}包含所有不等于[A, A + new_length)
的元素。
答案 1 :(得分:0)
您误解了他们希望您如何解决问题。他们有一段代码如下:
int main() {
int array[2] = {4, 5};
int length = 2;
// Call the user's function
int new_length = removeElement(array, length, 4);
// Validate their output.
assert(new_length == 1);
assert(array[0] == 5);
}
您的代码在第二个断言中失败。