平安科技2019秋招--查找元素

分析:枚举a和b,在排序后的数组里二分查找c=-a-b。

注意:在找c的时候不能和a和b重复。

【参考代码】

#include <bits/stdc++.h>
using namespace std;
const int N=1000+5;
const int inf=0x3f3f3f3f;                  
int n;
int a[N];
set<pair<int,int>> vis;
multiset<int> s;//用multiset是因为有重复元素的存在 
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        s.insert(a[i]);
    }
    sort(a+1,a+1+n);
    for(int i=1;i<=n;i++){
        s.erase(s.find(a[i]));
        for(int j=i+1;j<=n;j++){
        s.erase(s.find(a[j]));
        if(s.count(-a[i]-a[j])){
        int b[3]={a[i],a[j],-a[i]-a[j]};
        sort(b,b+3);
        auto p=make_pair(b[0],b[1]); 
        if(!vis.count(p)){//去重,只要b[0]和b[1]在vis没找到就说明这是一个新的三元组 
        printf("%d %d %d\n",a[i],a[j],-a[i]-a[j]);
        vis.insert(p);    
        }    
            
        }
        s.insert(a[j]);    
        }
        s.insert(a[i]);
    }
    return 0;
}

 

  

  

posted @ 2019-08-19 14:47  浅滩浅  阅读(184)  评论(0编辑  收藏  举报