删除数组中与任何给定目标相等的元素

时间:2015-02-02 15:30:44

标签: c++ algorithm

完整的问题是:

  

给定一个数组和一个值,删除该值的所有实例并返回新的长度。可以更改元素的顺序。除了新的长度之外你留下的东西并不重要。

并且有我的代码。

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]

我想知道为什么,我认为应该是对的,任何人都可以给我足够的理由让我理解吗?

2 个答案:

答案 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);
}

您的代码在第二个断言中失败。