Найти пересечение двух массивов в C ++ - PullRequest
0 голосов
/ 29 апреля 2020

Вот мой код:

  void intersection(int input1[], int input2[], int size1, int size2) {
    unordered_map<int,int> mymap;
    for(int i=0;i<size1;i++){
        if(!mymap.count(input1[i]))
            mymap[input1[i]] = 1;
        else
            mymap[input1[i]]++;
    }

    for(int i=0; i<size2; i++){
        if(mymap.count(input2[i]) > 0){
            cout<<input2[i]<<endl;
            mymap[input2[i]]--;  //Line1
        }   
    }
}

Я пытался уменьшить «ключ» в «Line1», но не получил правильный вывод. Пример ввода:

размер1: 6

массив1: 2 6 8 5 4 3

размер2: 7

массив2: 2 2 3 4 7 4 3

Ваш вывод: 2 2 3 4 4 3

Ожидаемый результат: 2 3 4

1 Ответ

0 голосов
/ 29 апреля 2020

Базовые логи c верны, но синтаксис неверен:

mymap.count(x) возвращает количество присутствующего ключа времени. Вы хотите mymap[x] (или использовать std::multi_set).

Line1 должно тогда быть:

mymap[input2[i]]--;

Кроме того, ваш первый l oop (с аналогичной ошибкой BTW) можно упростить до:

std::unordered_map<int,int> mymap;
for(int i=0;i<size1;i++){
    mymap[input1[i]]++;
}

итоговый код:

void intersection(int input1[], int input2[], int size1, int size2) {
    std::unordered_map<int,int> mymap;
    for(int i=0;i<size1;i++){
        mymap[input1[i]]++;
    }
    for(int i=0; i<size2; i++){
        if (mymap[input2[i]] > 0){
            cout << input2[i] << endl;
            mymap[input2[i]]--;
        }   
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...