我自己想出了这个问题。我只是一个初学者,目前正在学习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
但是输出的确是巨大的,并且远远不能达到期望的输出。
答案 0 :(得分:0)
您可以找到有关此算法问题的许多文章 这是一个: Solving Algorithmic Problems: Find a Duplicate in an Array
您应该提出一些问题来应对这一挑战
然后,您可以从天真的实现开始,然后尝试计算 如何优化
例如: 我的代码的哪些部分可以运行多次
关于使用C ++的方法,请尝试查找C ++的详细信息, 使用std :: vector或std :: array而不是C样式数组 寻找可以解决您某些问题的STL算法
答案 1 :(得分:0)
如果您愿意让C ++成为您的强大工具,我可能建议您先熟悉STL。
以下程序通过将矢量转换为地图来完成此工作,该地图负责处理索引。
#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);
}