以前都是用暴力破解,学了容器之后搞一搞不一样的东西
就没有返回下标了,直接打印出来了
#include<iostream>
#include<map>
using namespace std;
//利用容器实现,给定一个num,和一个数组,找出数组中和为num的两个数
int func(int* a, int len, int dest)
{
map<int, int> list; //利用map降低查询的时间复杂度
for (int i = 0;i < len;i++)
{
list.insert({ a[i],i });
}
for (auto it = list.begin();it != list.end();++it)
{
if (it != list.end())
{
int x = dest - (*it).first;
auto re = list.find(x);
if (re != list.end())
{
cout << " re = " << (*re).first << endl;
cout << (*it).first << " " << (*re).first << endl;
cout << "下标为:"<<(*it).second << "," << (*re).second << endl;
return 1;
}
}
else
{
break;
}
}
return 0;
}
int main()
{
int a[5];
int dest;
cout << "输入目标数:" << endl;
cin >> dest;
cout << "输入数组:" << endl;
for (int i = 0;i < 5;i++)
{
//scanf_s("%d", &a[i]);
cin >> a[i];
}
int k=func(a, 5, dest);
if (!k)
{
cout << "未找到" << endl;
}
else
{
cout << "找到!!!" << endl;
}
}