Нахождение повторяющегося элемента в массиве - PullRequest
0 голосов
/ 24 июня 2019

Я придумал эту проблему самостоятельно. Я только начинающий и изучаю C ++ в настоящее время.
В. Найдите все повторяющиеся элементы в массиве и укажите их порядковый номер.

Я пытаюсь решить этот вопрос, используя циклы for.

#include <iostream>

using namespace std;
void arfn(int var1[],int length){
    int x,y;
    int store[length];
    for(x=0;x<length;x++){
        store[x]=var1[x];}

    for(int counter=0;counter<length;counter++)
    {
        cout<<store[counter]<<endl;
        for(x=0;x<length;x++) {
           for (y=0;y!=x && y<length;y++)
            /*By these loops i expect to find index number of repeated elements, 
                eliminating the case of program showing the same index numbers*/
            {   
                if(store[x]=store[y]) {
                    cout<<store[x]<<" "<<x<<" "<<y<<" "<<endl;
                } 
            }
        }            
    }

}
int main()
{
    int numbers[]={22,33,44,55,55};
    int length=5;
    arfn(numbers,length);

    return 0;
}

Я ожидаю найти вывод как
55 3 4
но результат действительно огромен и далеко не соответствует желаемому результату.

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

Я мог бы предложить вам сначала ознакомиться с STL, если вы хотите сделать C ++ мощным инструментом для вас.

Следующая программа выполняет работу, преобразовывая вектор в карту, которая заботится о индексах.

#include <iostream>
#include <vector>
#include <iterator>
#include <map>

void printDuplicates(const std::vector<int>& arr)
{
    std::map<int, std::vector<int>> map;
    for (auto iter=arr.begin(); iter!=arr.end(); iter++)
    {
        auto index = std::distance(arr.begin(), iter);
            map[*iter].push_back(index);
    }
    for (auto& iter : map)
    {
        if (map[iter.first].size()>1)
        {       

            std::cout << iter.first << " ";
            for (auto iterIndices : map[iter.first])
            {
                std::cout << iterIndices << " ";
            }
            std::cout << std::endl;
        }
    }
}

int main() {
    std::vector<int> arr{ 1,2,5,7,2,8,4,7 };
    printDuplicates(arr);

}
0 голосов
/ 24 июня 2019

Вы можете найти много статей по этой алгоритмической проблеме, вот одна из них: Решение алгоритмических задач: найти дубликат в массиве

Вам следует подойти к этой задаче с некоторыми вопросами

  1. Каков ожидаемый размер ввода?
  2. Какова требуемая сложность?
  3. Могу ли я использовать больше памяти для оптимизации сложности?
  4. Мой вход отсортирован или нет?

Тогда вы можете начать с наивной реализации и попытаться выяснить, как ее можно оптимизировать

Например: какие частимой код запускается более одного раза

Что касается использования C ++, попробуйте поискать специфику C ++, используйте std :: vector или std :: array вместо массивов в стиле C, ищите алгоритмы STL, которые могут решить некоторые ваши вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...