【发布时间】:2020-06-21 13:28:44
【问题描述】:
#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[],可能不是按排序顺序排列的。任务是以正元素与绝对值相同的负元素配对的方式对正元素和负元素进行配对。如果元素不存在对元素,则忽略它。输出应包含按绝对值升序排列的所有对。要打印一对,应在其相应的负值之前打印正值。注意:数组中的元素是不同的。输入数组 = 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。std::unordered_map本质上是无序的(因此得名),无法排序。 -
long int arr[n]不应该编译。您需要使用long int *arr = new long int[n];动态分配该数组 -
@J.Lengel 或者更好,
std::vector<int> arr(n); -
那就更好了 ;)
-
说真的,如果你有测试用例,你真的应该调试自己的代码。仅仅发布代码并请人在这里调试代码就值得投反对票。
标签: c++ data-structures hashmap