#include<bits/stdc++.h>
using namespace std;
int main()
{
int flag=0;
int T,i;
cin>>T;
while(T--)
{
unordered_map<int,int>h;
long int n;
cin>>n;
long int arr[n];
for(i=0;i<n;i++)
{
cin>>arr[i];
}
sort(arr, arr+n);
for(i=0;i<n;i++)
{
if(arr[i]>0)
h[arr[i]]=0;
}
for(i=0;i<n;i++)
{
if(arr[i]<0 && h.find((-1)*(arr[i]))!=h.end())
{
h[(-1)*(arr[i])]=arr[i];
flag=1;
}
}
for(auto x=h.begin(); x!=h.end(); x++)
{
if(x->second!=0)
{
cout<<x->first<<" "<<x->second<<" ";
}
}
if(flag==0)
{
cout<<0;
}
cout<<endl;
}
}
给定N个正整数对和负整数对的数组arr[],可能不按排序顺序排列。 任务是将正,负元素配对,使一个正元素与一个绝对值相同的负元素配对。 如果一个元素没有pair元素,那么忽略它。 输出应包含按绝对值递增顺序排列的所有对。 若要打印成对,应先打印正值,然后再打印其对应的负值。 注意:数组中的元素是不同的。 输入数组=1,3,6,-2,-1,-3,2,7输出:1-1 2-2 3-3
我的代码在测试用例输入数组中失败=-1-2-5-6 1 3 4 2 5 6预期输出=1-1 2-2 5-5 6-6我的输出=6-6 5-5 1-1 2-2我在哪里做错了
使用std::map有一个排序后的映射会产生结果。 如果您愿意拥有自己的排序函数,那么可以使用带有overloaded()运算符的struct包装器,并记住特定于容器的算法要比通用算法好。