• 平安科技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
    ",a[i],a[j],-a[i]-a[j]);
            vis.insert(p);    
            }    
                
            }
            s.insert(a[j]);    
            }
            s.insert(a[i]);
        }
        return 0;
    }

      

      

    不一样的烟火
  • 相关阅读:
    transform:translate -50%解释
    无缝滚动条
    css二维画面练习-扑克牌
    css二维动画
    ORM了解
    socket总结
    2016/9/23总结电脑内容
    winform控件跨线程委托
    HttpRequestMessage
    vue设置每个页面的头部title
  • 原文地址:https://www.cnblogs.com/cstdio1/p/11377028.html
Copyright © 2020-2023  润新知