2015-02-02 2 views
-2

полный вопрос:удалить элемент массива, который равен любому данному targert

Учитывая массив и значение, удалить все экземпляры этого значения на месте и возвращает новый порядок length.The элементов можно изменить. Неважно, что вы оставляете за новой длиной.

и есть мой код.

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

«мы должны выводить» и «но ожидаем» означают одно и то же. Я не могу сказать, какая программа выводится, и чего ожидает судья. Но в любом случае правильный ответ - [5], так как вы должны удалить все экземпляры 4 из массива. Вы ничего не удаляете из массива, вы просто перемещаете неравные элементы в вектор, а затем * выбрасываете вектор *. – cdhowie

+1

Это однострочный шрифт с использованием 'std :: remove' и' vector :: erase'. – PaulMcKenzie

+0

@cdhowie прав, Учитывая ваше описание проблемы, пожалуйста, просмотрите свой вопрос, чтобы получить помощь. – samuel

ответ

2

Запрос является то, что вы удалите все экземпляры этого значения вместо, то есть, изменять содержимое массива, на который указывает А. Вы должны вернуть новую длину, так что массив [A, A + new_length) содержит все элементы, не равны elem.

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

Ваш код не работает во втором утверждении.

Смежные вопросы